【发布时间】:2023-08-31 04:50:01
【问题描述】:
所以在大学实践课上有一个练习:
"创建将共享值定义为 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 文档并找到了可能的解决方案 - Semaphore,但也许我不太了解它..
在信号量的情况下代码看起来:
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 范围内变化 - 更好。
附:不要建议我使用线程类中的线程 - 问题是关于多处理的。
【问题讨论】:
标签: python synchronization multiprocessing semaphore