跨多个进程的Python threading.Condition()功能

时间:2011-10-21 04:42:27

标签: python multithreading

我正在使用mod_wsgi编写WSGI应用程序。我想拥有许多并发连接的能力。 mod_wsgi为每个请求旋转一个新进程,因此无法使用threading.Condition()来通知从一个线程到另一个线程的更改。

我知道有几种不同的方法可以在不同的运行进程(RPC,AMQP,d-bus,Jabber)之间提供实时消息传递,但我正在寻找的是与单行线程接近的东西.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

再一次,我正在寻找的东西与one-liners threading.wait()和threading.notifyAll()一样接近。我不介意设置一些配置甚至是在后台运行的东西 - 但是我有相当数量的代码依赖于在请求中间停止和等待的能力,直到通知它可以继续。< / p>

1 个答案:

答案 0 :(得分:1)

在mod_wsgi配置中,设置processes = 1。有关详细信息,请参阅http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess