簡體   English   中英

服務器啟動后如何繼續python腳本?

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

來自python 文檔

serve_forever(poll_interval=0.5):處理請求直到明確的 shutdown() 請求。 每隔 poll_interval 秒輪詢關機。 忽略超時屬性。 如果您需要執行周期性任務,請在另一個線程中執行。

您應該嘗試使用httpd.handle_request嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM