Python 锁定不起作用



给定以下代码

import time
from multiprocessing import Pool
from threading import Lock
import multiprocessing
PROCESSES = 2
WORKER_CALLS = 2
lock = Lock()
def run(num):
lock.acquire()
print("enter"+str(num))
time.sleep(2)
print("exit" + str(num))
lock.release()

if __name__ == "__main__":
pool = multiprocessing.Pool(processes=PROCESSES)
pool_outputs = pool.map(run, range(WORKER_CALLS))
pool.close()
pool.join()
print('Pool:', pool_outputs)

预期输出是,因为假设锁定部分只能有一个进程在:

enter0
exit0
enter1
exit1
Pool: [None, None]

但实际输出是:

enter0
enter1
exit0
exit1
Pool: [None, None]

问题是什么以及如何解决这个问题?

你不能像这样锁定进程,你必须使用multiprocessing.Manager

管理器提供了一种创建可在其之间共享的数据的方法 不同的过程,包括通过网络共享 在不同计算机上运行的进程。管理器对象控制 管理共享对象的服务器进程。其他工艺可以 使用代理访问共享对象。


manager = multiprocessing.Manager()
lock = manager.Lock()

而不是

lock = Lock()

最新更新