[英]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.