2011-10-21 2 views
0

私は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()。いくつかの設定やバックグラウンドで実行されているものも設定しても構いませんが、要求の途中で停止して待機する機能に依存するかなりの量のコードがあります。

+0

mod_wsgiモジュールは、リクエストごとに新しいプロセスをスピンアップしません。 mod_wsgiの特定の設定はマルチプロセスなので、リクエストは毎回同じプロセスには行きません。デフォルトのシングルプロセスでmod_wsgiのデーモンモードを使用すると、この問題は発生しません。 –

答えて

1

mod_wsgiの設定では、processes = 1を設定します。詳細はhttp://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcessを参照してください。

+0

私が見たのは、問題は私が成長した場合に1台のマシン上の1つのプロセスに自分自身を限定したくないということです。それは間違いなく解決策であり、私が探しているものを正確に満たすことはできません。 –

関連する問題