私はmod_wsgiを使用してWSGIアプリケーションを作成しています。私は多くの同時接続が可能です。 mod_wsgiはリクエストごとに新しいプロセスをスピンアップし、あるスレッドから別のスレッドへの変更を通知するためにthreading.Condition()を使用できなくします。Python threading.Condition()複数のプロセスにわたる機能
異なる実行中のプロセス(RPC、AMQP、d-bus、Jabber)間でリアルタイムメッセージングを提供する方法はいくつかありますが、特に私が探しているのはone-liners threading.wait()およびthreading.notifyAll()。
私がmod_wsgiを使用せず、複数のスレッドを実行していたときは、基本的に私のために働いていました。明らかに二つの機能は、異なるスレッドで実行されました:
def put_value:
# user has given a new value
# update in DB, then notify any waiting threads
my_condition.acquire()
my_condition.notifyAll()
my_condition.release()
def get_value:
# user has requested to receive a new value as of this point
# we will return a value as soon as we are notified it has changed
my_condition.acquire()
my_condition.wait()
my_condition.release()
# return some val out of the DB
はもう一度、私が探しているワンライナーに近い何かthreading.wait()であるとthreading.notifyAll()。いくつかの設定やバックグラウンドで実行されているものも設定しても構いませんが、要求の途中で停止して待機する機能に依存するかなりの量のコードがあります。
mod_wsgiモジュールは、リクエストごとに新しいプロセスをスピンアップしません。 mod_wsgiの特定の設定はマルチプロセスなので、リクエストは毎回同じプロセスには行きません。デフォルトのシングルプロセスでmod_wsgiのデーモンモードを使用すると、この問題は発生しません。 –