Python で Web アプリケーションを作成するときは、常に 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 ですが、何でもかまいません) と同じプロセス内の 1 つのスレッドにブロッキング サーバーを配置する方法を示しています。