擅长:python、mysql、java
<p>使用<code>Manager</code>队列。这是在工作进程之间共享的队列。如果使用普通队列,则每个工作进程都会对其进行pickle和unpickle操作,并因此进行复制,这样每个工作进程就无法更新队列。</p>
<p>然后让您的工作人员向队列中添加内容,并在工作人员工作时监视队列的状态。您需要使用<code>map_async</code>来执行此操作,因为这样可以看到整个结果何时就绪,从而可以中断监视循环。</p>
<p>示例:</p>
<pre><code>import time
from multiprocessing import Pool, Manager
def play_function(args):
"""Mock function, that takes a single argument consisting
of (input, queue). Alternately, you could use another function
as a wrapper.
"""
i, q = args
time.sleep(0.1) # mock work
q.put(i)
return i
p = Pool()
m = Manager()
q = m.Queue()
inputs = range(20)
args = [(i, q) for i in inputs]
result = p.map_async(play_function, args)
# monitor loop
while True:
if result.ready():
break
else:
size = q.qsize()
print(size)
time.sleep(0.1)
outputs = result.get()
</code></pre>