以下代码非常简单,仅用于测试目的,但我无法获得所需的输出:
from multiprocessing import Process,Lock
def printing(l,i):
l.acquire()
print i
l.release()
if __name__ == '__main__':
lock = Lock()
for i in range(10):
Process(target=printing,args=(lock,i)).start()
输出为:
^{pr2}$锁应该暂停其他进程的执行。为什么不在这里发生?在
你期望什么样的产出?我觉得输出很好:一个
range(10)
的排列。进程执行的顺序可能因运行而异。这是意料之中的。在我怀疑你误解了锁的作用。当您获得锁时,每个其他进程也会尝试获取相同的锁块,直到锁被释放。这就是全部。在测试运行中,进程0碰巧首先获得了锁。在进程0释放锁之前,任何其他试图获取锁的进程都将被阻止。进程0打印
0
,然后释放锁。然后进程1获得了锁。等等注释掉您的
l.release()
,您将看到您的程序永远不会完成:第一个进程碰巧获得锁,然后打印它的整数,所有其他进程永远被阻塞,等待获取锁。在相关问题 更多 >
编程相关推荐