[英]How to continue python script after server started?
我有一個這樣的腳本:
import http.server
class JotterServer(http.server.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.end_headers()
message = "Howdy"
self.wfile.write(bytes(message, 'utf-8'))
return
def start_server():
print('Starting jotter server...')
server_address = ('127.0.0.1', 8000)
httpd = http.server.HTTPServer(server_address, JotterServer)
httpd.serve_forever()
if __name__ == '__main__':
start_server()
print("hi")
最后一行永遠不會被調用。 服務器啟動后如何繼續運行代碼?
以下程序將在新線程中啟動服務器並繼續主線程。 主線程將打印 hi 到控制台。
import http.server
import threading
class JotterServer(http.server.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200);
self.send_header('Content-Type', 'text/plain')
self.end_headers()
message = "Howdy"
self.wfile.write(bytes(message, 'utf-8'))
return
def start_server():
print('Starting jotter server...')
server_address = ('127.0.0.1', 8080)
httpd = http.server.HTTPServer(server_address, JotterServer);
thread = threading.Thread(target=httpd.serve_forever);
thread.start();
start_server()
print("hi")
你可以試試:
from threading import Thread
...
t=Thread(target=start_server)
t.start()
(而不是直接start_server()
)
我想這是因為serve_forever
serve_forever(poll_interval=0.5):處理請求直到明確的 shutdown() 請求。 每隔 poll_interval 秒輪詢關機。 忽略超時屬性。 如果您需要執行周期性任務,請在另一個線程中執行。
您應該嘗試使用httpd.handle_request嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.