我试图使用Python2.6中的多处理模块,但显然有些东西我不明白。我希望下面的类将add()发送给它的数字相加,并在get_result()方法中返回总和。下面的代码打印“0”,我希望它打印“2”。我错过了什么?在
import multiprocessing
class AdderProcess(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
self.sum = 0
self.queue = multiprocessing.JoinableQueue(5)
self.daemon = True
self.start()
def run(self):
while True:
number = self.queue.get()
self.sum += number
self.queue.task_done()
def add(self, number):
self.queue.put(number)
def get_result(self):
self.queue.join()
return self.sum
p = AdderProcess()
p.add(1)
p.add(1)
print p.get_result()
PS.这个问题已经解决了。谢谢你的回答!为了方便读者阅读,以下是完整的工作版本:
^{pr2}$
self.sum
是2。。。在这个过程中:请参阅multiprocessing 16.3.1.4. - Sharing state between processes,了解如何使{}在不同进程中保持相同。在
将
self.sum = 0
更改为self.sum = multiprocessing.Value('d', 0.0)
,并使用self.sum.value
访问或更改该值。在问题是这样的:一旦您在}等于0。
所以0被打印出来了。在
__init__
中调用self.start()
,主进程就会分叉出一个子进程。将复制所有值。现在有两个版本的p
。在主进程中,p.sum
为0。在子进程中,调用run
方法,p.sum
被扩充为2。但是当主进程调用p.get_result()
时,其版本的p
仍然具有{当您想在进程之间共享浮点值时,需要使用共享机制,例如
mp.Value
。在有关如何共享值的更多选项,请参见“Sharing state between processes”。在
相关问题 更多 >
编程相关推荐