我是python中多线程的初学者.
我想在线程中使用Lock.是否必须在线程中声明为全局?
我的代码看起来像这样:
i = 0
lock = threading.RLock()
def do_work():
global i
# global lock ?????????????
while i < len(my_list):
lock.acquire()
my_i = i
i += 1
lock.release()
my_list[my_i].some_works()
workers = [threading.Thread(target=do_work) for _ in range(8)]
for worker in workers:
worker.start()
解决方法:
要回答你的直接问题,线程不必使用全局来知道锁变量是什么. Here is more information on scope in Python
不幸的是,“正确使用”的答案取决于您的应用/情况.只要您的锁实际上是应用程序的全局锁定,您所做的事情就没有任何内在错误.如果您的锁不是您的应用程序的全局锁,或者您想要破坏您的应用程序,您可以通过创建自己的线程对象来实现. Here is a great tutorial on using threads/locks.
祝好运!