在 python 中传递锁

Passing locks in python

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

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)

因为我正在导入东西,所以我必须将锁传递到新区域,有什么办法可以解决这个问题,比如全局声明锁。这将使我的代码更加清晰。

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...

如果这可以快速解决您正在处理的问题,请使用它。但我不会真的推荐它用于真正的编程项目。更好的编程实践是让您的代码更少地依赖全局状态(例如模块级变量),并且具有更明确地传递的参数。这样你总是知道你的代码依赖什么,并且它更可重用。