在 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...
如果这可以快速解决您正在处理的问题,请使用它。但我不会真的推荐它用于真正的编程项目。更好的编程实践是让您的代码更少地依赖全局状态(例如模块级变量),并且具有更明确地传递的参数。这样你总是知道你的代码依赖什么,并且它更可重用。
我想知道在导入其他模块时是否有更好的方法来处理锁。现在我得到了这个...
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...
如果这可以快速解决您正在处理的问题,请使用它。但我不会真的推荐它用于真正的编程项目。更好的编程实践是让您的代码更少地依赖全局状态(例如模块级变量),并且具有更明确地传递的参数。这样你总是知道你的代码依赖什么,并且它更可重用。