擅长:python、mysql、java
<p>如果您使用的是<code>multiprocessing</code>而不是<code>threading</code>,那么您应该使用来自<code>multiprocessing</code>的<code>Queue</code>类,因为它是在进程之间正确共享的类。有关详细信息,请参见<a href="http://docs.python.org/library/multiprocessing.html#module-multiprocessing" rel="nofollow">the Python docs on the multithreading module</a>。在</p>
<p>无论何时创建子进程,标准的<code>Queue</code>类(来自<code>Queue</code>)将有效地分成两个<em>独立的</em>队列。这意味着,在您的情况下,您在主进程中有一个队列(没有人会接触它),在生产者中有一个不同的</em>队列(正在写入),而消费者中的另一个</em>队列(正在从中读取)。在</p>
<p>这三者之间没有任何联系。在</p>
<p>最快的解决方法是简单地改变:</p>
<pre><code>from Queue import Queue
</code></pre>
<p>进入:</p>
^{pr2}$
<p>这样,队列的类型就可以在进程之间而不仅仅是线程之间工作。或者干脆去掉<code>from</code>行,然后使用:</p>
<pre><code>queue = multiprocessing.Queue()
</code></pre>
<p>另外(虽然我意识到这只是播放代码),但在消费者中进行睡眠操作是非常不寻常的,通常您只需要为队列中出现的项目做好准备。在</p>