Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python锁定不起作用_Python_Python 3.x - Fatal编程技术网

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()