Python-多线程-锁是否必须是全局的?

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()
Run Code Online (Sandbox Code Playgroud)

Jos*_*eia 3

不,它不必是全球性的。您可以在函数中创建它,然后将其作为参数传递给线程,如下所示:

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()
Run Code Online (Sandbox Code Playgroud)