繁体   English   中英

如何关闭python服务器

[英]How to shut down python server

使用此代码运行 python 服务器:

import os
from http.server import SimpleHTTPRequestHandler, HTTPServer                                                                                                                                   

os.chdir('c:/users/owner/desktop/tom/tomsEnyo2.5-May27')                                                                                                                                                                                      
server_address = ('', 8000)                                                                                                                                                                    
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)                                                                                                                                   
httpd.serve_forever()

如何让它停止?

您的问题不明确 - 如果您通过 shell 运行服务器,即 python myscript.py,只需按crtl + C

如果您想使用代码优雅地关闭它,您必须决定某些条件、点或异常将其称为关闭。 您可以添加一个块并调用httpd.shutdown() - 因为HttpServer本身是一个SocketServer.TCPSServer子类:

第一个类HTTPServerSocketServer.TCPServer 的子类,因此实现了SocketServer.BaseServer接口。 它创建并侦听 HTTP 套接字,将请求分派给处理程序。

所以BaseServer有一个方法shutdown() ,因此作为一个子类 HttpServer 也有它。

例如:

import os
from http.server import SimpleHTTPRequestHandler, HTTPServer                                                                                                                                   

os.chdir('c:/users/owner/desktop/tom/tomsEnyo2.5-May27')                                                                                                                                                                                      
server_address = ('', 8000)   
try:
    httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)                                                                                                                                   
    httpd.serve_forever()
except Exception:
    httpd.shutdown()

有用的相关问题 -

如果您可以终止整个进程,则可以从处理程序线程发送 SIGTERM 信号:

os.kill(os.getpid(), signal.SIGTERM)

如果您在单元测试中需要 Python HTTP 服务器,那么建议在单独的线程中运行它并从另一个线程中停止它,如下所示:

import unittest
from threading import Thread
from http.server import HTTPServer

class TestWithHTTP(unittest.TestCase):
    """
    My unit test that needs a HTTP server
    NOTE: skeleton code
    """

    def setUp(self):
        # you need to provide the host, port and request handler class
        self.myserver = HTTPServer((host, port), HandlerClass)
        # start HTTP server in another thread
        httpthread = Thread(target=self.myserver.serve_forever)
        httpthread.start()
        # ... any other setup operations ...

    def test_something(self):
        # ... your unit testing code ...
        pass

    def tearDown(self):
        # shut down the server from yet another thread
        killerthread = Thread(target = self.myserver.shutdown)
        killerthread.start()

只需使用^C (control+c)关闭 python 服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM