Python Web服务器 - 实现其他功能

3 投票
2 回答
1007 浏览
提问于 2025-04-16 01:55

通过下面这个例子,我可以让一个基本的网络服务器运行起来,但我的问题是,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执行完毕后,程序才会退出。

撰写回答