Python锁定不起作用
给定以下代码Python锁定不起作用,python,python-3.x,Python,Python 3.x,给定以下代码 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
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]
问题是什么?如何解决此问题?您不能像这样锁定进程,您必须使用: 管理者提供了一种创建数据的方法,这些数据可以在 不同的进程,包括通过网络在 在不同机器上运行的进程。管理器对象控制 管理共享对象的服务器进程。其他过程也可以 使用代理访问共享对象
而不是
lock = Lock()
我对Python一无所知,但我的第一个猜测是,
Lock
只能跨线程工作,而不能跨进程(因此每个进程都有自己的Lock
)。@melpomene是正确的:锁通常用于保护对共享数据的访问。由于不同的进程没有共享数据(除非您执行特定的操作),因此也不需要使用锁。
lock = Lock()