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

2024-06-24 13:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个剧本:

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

start_server()

print("hi")

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


Tags: importselfsendhttpmessageserveraddressdef
3条回答

我想这是因为serve_forever

来自python docs

serve_forever(poll_interval=0.5): Handle requests until an explicit shutdown() request. Poll for shutdown every poll_interval seconds. Ignores the timeout attribute. If you need to do periodic tasks, do them in another thread.

您可能应该尝试使用httpd.handle_request?在

下面的程序将在一个新线程中启动服务器并继续主线程。主线程将把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()

相关问题 更多 >