【发布时间】:2021-07-31 14:33:07
【问题描述】:
我正在运行以下代码。我期待打印在进程之间是随机的。但是,我看到了一个确定性的结果:在每次运行时,首先第一个进程完成它的循环,然后,第二个进程才开始运行循环。 我期待随机行为,这意味着两个进程之间的上下文切换。但我看到的只是一个进程完成后,第二个进程开始,没有任何上下文切换。
有人可以描述我缺少什么吗?
import multiprocessing
import time
import os
lock = multiprocessing.Lock()
def func(_lock):
for _ in range(0, 3):
with _lock:
print("sleeping in pid " + str(os.getpid()))
time.sleep(1)
print("finished sleeping in pid " + str(os.getpid()))
process1 = multiprocessing.Process(target=func, args=(lock,))
process2 = multiprocessing.Process(target=func, args=(lock,))
process1.start()
process2.start()
================================================ ===============
输出是:
在 pid 2322 中睡觉
在 pid 2322 中完成睡眠
在 pid 2322 中睡觉
在 pid 2322 中完成睡眠
在 pid 2322 中睡觉
在 pid 2322 中完成睡眠
在 pid 2323 中睡觉
在 pid 2323 中完成睡眠
在 pid 2323 中睡觉
在 pid 2323 中完成睡眠
在 pid 2323 中睡觉
在 pid 2323 中完成睡眠
进程以退出代码 0 结束
【问题讨论】:
-
你那里有一把锁。它让一切都变得连续。
-
我知道这是连续的。我不明白的是为什么所有第一把锁每次都是由同一个进程完成的
-
第一个进程是最先启动的。它很有可能能够在其他人之前获得锁。同样,其余进程也按照您启动它们的顺序排列在队列中。
标签: python multiprocessing python-multiprocessing locks