多个进程之间的多处理同步(Python)



所以在大学实践课上有一个练习:

"创建将共享值定义为 0 的程序,然后创建 启动 500 个进程,每个进程都增加了 共享值 1,最后打印出共享值。跑 这段代码几次,看看会发生什么,解释一下......"

最终版本如下所示:

from multiprocessing import Process, Value

n=Value('i', 0)
def fun():
        n.value+=1
for i in range(500):
        p=Process(target=fun).start()
print n.value

输出值在 420-480 范围内变化,我明白为什么。
问题是如果可能的话,如何使其始终为 500?我一直在阅读 Python 文档并找到了可能的解决方案 - 信号量,但也许我不太了解它。
在信号量代码的情况下,看起来:

from multiprocessing import Process, Value, Semaphore
n=Value('i', 0)
sem=Semaphore()
def fun():
        sem.acquire()
        n.value+=1
        sem.release()
for i in range(500):
    p=Process(target=fun).start()
print n.value

在这种情况下,最终输出在 492-495 范围内变化 - 更好。

附言不建议我使用线程类中的线程 - 问题是关于多处理的。

您的流程未联接。因此,您的锁有效,但在完成所有进程以递增之前显示 n 的值,因此 n<500。您可以尝试以下代码:

from multiprocessing import Process, Value, Semaphore
n=Value('i', 0)
sem=Semaphore()
def fun():
        sem.acquire()
        n.value+=1
        sem.release()
pcs=[]
for i in range(500):
    p=Process(target=fun)
    pcs.append(p)
    p.start()
for i in pcs:
    i.join()
print n.value

最新更新