Python锁定不存在

2024-04-25 08:45:51 发布

您现在位置: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]

有什么问题,怎么解决?你知道吗


Tags: runfromimportnonelocktimemultiprocessingnum
1条回答
网友
1楼 · 发布于 2024-04-25 08:45:51

不能像这样锁定进程,必须使用^{}

Managers provide a way to create data which can be shared between different processes, including sharing over a network between processes running on different machines. A manager object controls a server process which manages shared objects. Other processes can access the shared objects by using proxies.


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

而不是

lock = Lock()

相关问题 更多 >