Python Web服务器 - 实现其他功能
通过下面这个例子,我可以让一个基本的网络服务器运行起来,但我的问题是,handle_request() 这个函数会阻塞 do_something_else(),也就是说,直到有请求进来之前,do_something_else() 都不能执行。有没有什么办法可以让网络服务器在处理请求的同时,也能做其他后台任务呢?
def run_while_true(server_class=BaseHTTPServer.HTTPServer,
handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
while keep_running():
httpd.handle_request()
do_something_else()
2 个回答
0
你应该有一个线程来处理HTTP请求,还有一个线程来执行do_something_else()
这个操作。
2
你可以通过Python的线程模块来使用多个执行线程。下面是一个例子:
import threading
# ... your code here...
def run_while_true(server_class=BaseHTTPServer.HTTPServer,
handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
while keep_running():
httpd.handle_request()
if __name__ == '__main__':
background_thread = threading.Thread(target=do_something_else)
background_thread.start()
# ... web server start code here...
background_thread.join()
这个例子会让一个线程在你的网络服务器启动之前执行do_something_else()
这个函数。当服务器关闭时,join()
这个调用会确保do_something_else
执行完毕后,程序才会退出。