Python全局threading.condition()并在多个模块中使用

时间:2011-10-19 17:34:47

标签: python multithreading module

编辑:我遇到的问题与我的程序结构无关。 FAPWS3的路由选择了一个类似的,具有密切命名的功能。

我有一个跨多个文件的大型程序。我需要在这些文件中使用threading.condition()锁定功能。这是我正在尝试做的一个例子。在生产中我没有得到任何错误,但是锁的状态似乎没有被共享(我可以在一个线程中获取,并且在没有先前被释放的情况下在另一个线程中获取)。

main.py

import servera, serverb

# some code that deploys server-a and server-b as threads

constants.py

import threading
mylock = threading.Condition()

servera.py

from constants import mylock

Class ServerA():
  def doSomething():
    mylock.acquire()
    # do something
    mylock.release()

serverb.py

from constants import mylock

Class ServerB():
  def doSomethingElse():
    mylock.acquire()
    # do something else
    mylock.release()

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,当你导入一个模块时,Python会运行它。所以我认为你在每个文件中都有一个不同的mylock。 您可以尝试打印它并查看ID。

下面发布的杰夫斯链接清除了:

  

因为每个模块只有一个实例,所以对模块对象所做的任何更改都会反映在任何地方。

所以这不是问题。