擅长:python、mysql、java
<p>如果没有奇特的IPC(进程间通信)技巧,最简单的方法是使用带有回调函数的<code>Pool</code>方法。回调在主程序中运行(在由<code>multiprocessing</code>创建的线程中),并在每个结果可用时使用它们。当回调看到您喜欢的结果时,它可以终止<code>Pool</code>。比如说,</p>
<pre><code>import multiprocessing as mp
def worker(i):
from time import sleep
sleep(i)
return i, (i == 5)
def callback(t):
i, quit = t
result[i] = quit
if quit:
pool.terminate()
if __name__ == "__main__":
N = 50
pool = mp.Pool()
result = [None] * N
for i in range(N):
pool.apply_async(func=worker, args=(i,), callback=callback)
pool.close()
pool.join()
print(result)
</code></pre>
<p>这几乎肯定会显示以下内容(操作系统调度异常<em>可能</em>允许另一个或两个输入被消耗):</p>
<pre><code>[False, False, False, False, False, True, None, None, None, None,
None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None]
</code></pre>