擅长:python、mysql、java
<p>将<code>self.sum = 0</code>更改为<code>self.sum = multiprocessing.Value('d', 0.0)</code>,并使用<code>self.sum.value</code>访问或更改该值。在</p>
<pre><code>class AdderProcess(multiprocessing.Process):
def __init__(self):
...
self.sum = multiprocessing.Value('d', 0.0)
...
def run(self):
while True:
number = self.queue.get()
self.sum.value += number # < use self.sum.value
self.queue.task_done()
def get_result(self):
self.queue.join()
return self.sum.value # < use self.sum.value
</code></pre>
<p>问题是这样的:一旦您在<code>__init__</code>中调用<code>self.start()</code>,主进程就会分叉出一个子进程。将复制所有值。现在有两个版本的<code>p</code>。在主进程中,<code>p.sum</code>为0。在子进程中,调用<code>run</code>方法,<code>p.sum</code>被扩充为2。但是当主进程调用<code>p.get_result()</code>时,其版本的<code>p</code>仍然具有{<cd7>}等于0。
所以0被打印出来了。在</p>
<p>当您想在进程之间共享浮点值时,需要使用共享机制,例如<code>mp.Value</code>。在</p>
<p>有关如何共享值的更多选项,请参见“<a href="http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes" rel="nofollow">Sharing state between processes</a>”。在</p>