[英]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
子类:
第一个类HTTPServer是SocketServer.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.