锁定多处理程序包不工作

2024-05-21 05:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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}$

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


Tags: 代码namefromimport目的lockreleaseif
1条回答
网友
1楼 · 发布于 2024-05-21 05:37:10

你期望什么样的产出?我觉得输出很好:一个range(10)的排列。进程执行的顺序可能因运行而异。这是意料之中的。在

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

注释掉您的l.release(),您将看到您的程序永远不会完成:第一个进程碰巧获得锁,然后打印它的整数,所有其他进程永远被阻塞,等待获取锁。在

相关问题 更多 >