[英]How to continue python script after server started?
I have a script like this:我有一个这样的脚本:
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")
The last line never gets called.最后一行永远不会被调用。 How do I keep running the code after the server is started?
服务器启动后如何继续运行代码?
The following program will start the server in a new thread and continue with the main thread.以下程序将在新线程中启动服务器并继续主线程。 The main thread will print hi to console.
主线程将打印 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")
you can try :你可以试试:
from threading import Thread
...
t=Thread(target=start_server)
t.start()
(instead of start_server()
directly) (而不是直接
start_server()
)
I guess this is because of serve_forever
我想这是因为
serve_forever
From python docs来自python 文档
serve_forever(poll_interval=0.5): Handle requests until an explicit shutdown() request.
serve_forever(poll_interval=0.5):处理请求直到明确的 shutdown() 请求。 Poll for shutdown every poll_interval seconds.
每隔 poll_interval 秒轮询关机。 Ignores the timeout attribute.
忽略超时属性。 If you need to do periodic tasks, do them in another thread.
如果您需要执行周期性任务,请在另一个线程中执行。
You should probably try using httpd.handle_request ?您应该尝试使用httpd.handle_request吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.