服务器启动后如何继续执行python脚本?

问题描述 投票:0回答:3

我有一个这样的脚本:

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")

最后一行永远不会被调用。服务器启动后如何继续运行代码?

python http server
3个回答
4
投票

以下程序将在新线程中启动服务器并继续主线程。主线程将打印 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")

特别注意不要将 () 放在

http.server_forever
的末尾,因为我们引用的是函数本身。


0
投票

你可以尝试一下:

from threading import Thread
...
t=Thread(target=start_server)
t.start()

(而不是直接

start_server()


0
投票

我想这是因为

serve_forever

来自python文档

serve_forever(poll_interval=0.5):处理请求,直到明确的 shutdown() 请求。每 poll_interval 秒轮询一次关闭。 忽略超时属性。如果您需要执行周期性任务,请执行 他们在另一个线程中。

您应该尝试使用 httpd.handle_request

© www.soinside.com 2019 - 2024. All rights reserved.