Dub*_*bon 6 python multithreading locking
我是python中多线程的初学者。
我想在线程中使用锁定。是否必须在线程中将其声明为全局?我的代码如下所示:
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()
不,它不必是全球性的。您可以在函数中创建它,然后将其作为参数传递给线程,如下所示:
i = 0
def do_work(lock):
    global i
    while i < len(my_list):
        with lock: # cleaner way to .acquire() and .release()
            my_i = i
            i += 1
         my_list[my_i].some_works()
def main():
    lock = threading.RLock()
    workers = [threading.Thread(target=do_work, args=lock,) for _ in range(8)]
    for worker in workers:
        worker.start()
main()