在python中传递锁

时间:2015-07-15 23:54:42

标签: python python-2.7 python-multithreading

我想知道在导入其他模块时是否有更好的方法来处理锁定。现在我已经有了......

import ot1, ot2, ot3
class Thread(threading.Thread):
    def __init___(blah, blah):

    def run(self):
        data, my_lock = self.data, self.my_lock
        return ot1.dostuff(data, my_lock) + ot2.dostuff(data, my_lock) + ot3.dostuff(data, my_lock)
if __name__ == '__main__':
    my_lock = threading.Lock()
    for x in range(10):
        Thread(data, my_lock)

因为我正在导入我必须将锁传递到新区域的东西,有没有办法解决这个问题,比如全局声明锁。这会让我的代码变得更加清晰。

1 个答案:

答案 0 :(得分:1)

Python有模块级变量,如果确实想要使用它们:

# main file, call it main.py
lock = None
if __name__ == '__main__':
    lock = threading.Lock()
    # launch threads without passing lock

然后,在任何其他文件中,您可以执行以下操作:

# other files:
from main import lock

# use the lock...

如果这解决了您正在处理的快速问题,请使用它。但我不会真的推荐它用于真正的编程项目。让代码更少依赖于全局状态(例如模块级变量),并且具有更明确传递的参数,这是更好的编程实践。通过这种方式,您始终可以了解代码所依赖的内容,并且它更具可重用性。