我想知道在导入其他模块时是否有更好的方法来处理锁定。现在我已经有了......
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)
因为我正在导入我必须将锁传递到新区域的东西,有没有办法解决这个问题,比如全局声明锁。这会让我的代码变得更加清晰。
答案 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...
如果这解决了您正在处理的快速问题,请使用它。但我不会真的推荐它用于真正的编程项目。让代码更少依赖于全局状态(例如模块级变量),并且具有更明确传递的参数,这是更好的编程实践。通过这种方式,您始终可以了解代码所依赖的内容,并且它更具可重用性。