当我用 Python 编写 Web 应用程序时,我总是将我的 Web 服务器与我的后台任务保持在同一个进程中。我不知道您使用的是什么网络服务器,但我个人使用的是CherryPy。您的应用程序可以有一堆线程作为 Web 服务器,而您喜欢的其他线程也可以作为后台任务。这样,您就不需要任何复杂的 IPC 与套接字、命名管道等。相反,您只需访问共享的、全局的、同步的数据结构来传递信息,并且您的不同模块可以直接调用彼此的函数。
编辑:为了澄清,您可以使用线程模块在与其他阻塞服务器不同的线程中运行您的 CherryPy 服务器。例如:
def listener():
sock = get_socket_from_somewhere()
while True:
client, addr = sock.accept()
# send data back to client, etc
from threading import Thread
t1 = Thread(target=listener)
t1.setDaemon(True)
t1.start()
cherrypy.quickstart() # you'd need actual arguments here
这个例子展示了如何在与 Web 服务器相同的进程中的一个线程中拥有一个阻塞服务器(在本例中为 CherryPy,尽管它可以是任何东西)。