擅长:python、mysql、java
<p>您导入<code>Manager</code>,但不使用它。作为第一种方法,请改为:</p>
<pre><code>a = Manager().dict({1: 0, 2: -1})
</code></pre>
<p>使用<code>multiprocessing</code>时,全局变量的工作方式与预期不同。子流程只能访问副本,并且在它们退出时会忘记它们所做的更改,除非您使用的是能够在流程之间传播信息的特殊设计的对象。</p>
<p>在进程之间传递数据有许多不同的替代方法,但是像上面那样使用<code>Manager</code>对象通常是最简单的。您还可以使用<code>Manager</code>对象创建多个共享对象:</p>
<pre><code>manager = Manager()
a = manager.dict({1: 0, 2: -1})
b = manager.list((1, 2, 3))
</code></pre>
<p>有关详细信息,请参阅<a href="http://docs.python.org/library/multiprocessing.html#managers" rel="nofollow">^{<cd1>}</a>文档。</p>
<p>另外,你使用的锁是不必要的。<code>Manager</code>帮你处理。正如<a href="http://docs.python.org/library/multiprocessing.html#synchronization-primitives" rel="nofollow">docs</a>所说</p>
<blockquote>
<p>Generally synchronization primitives are not as necessary in a multiprocess program as they are in a multithreaded program.</p>
</blockquote>