2

以下代码非常简单,仅用于测试目的,但我没有得到所需的输出:

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

输出是:

0
1
2
3
5
6
4
7
8
9

锁应该暂停其他进程的执行。为什么这里没有发生?

4

1 回答 1

4

你期望什么输出?输出对我来说看起来不错: 的排列range(10)。进程碰巧执行的顺序可能因运行而异。这是预期的。

我怀疑你误解了锁的作用。当您获取锁时,其他所有进程也会尝试获取相同的锁,直到锁被释放。就这样。在您的测试运行中,进程 0 碰巧首先获得了锁。任何其他也试图获取锁的进程都会被阻塞,直到进程 0 释放锁。进程 0 打印0然后释放锁。然后碰巧进程1获得了锁。等等。

注释掉你的l.release(),你会看到你的程序永远不会结束:第一个获得锁的进程然后打印它的整数,所有其他进程永远被阻塞等待获得锁。

于 2013-10-06T18:50:23.307 回答