4

我想并行执行一些进程并等到它们完成。所以我写了这段代码:

pool = mp.Pool(5)
for a in table:
    pool.apply(func, args = (some_args))
pool.close()
pool.join()

我会func在这里并行执行 5 个进程吗?还是唯一的选择是apply_async

4

2 回答 2

3

文档对此非常清楚:每次调用apply块,直到结果准备好。使用apply_async.

于 2013-06-26T11:24:45.843 回答
2

另一种解决方案是使用Pool.imap_unordered()

以下代码启动了一个由 5 个工作人员组成的池。然后它将三个作业发送到池中。第一个是 num=1,第二个是 num=2,以此类推。该函数的imap_unordered意思是当第一个结果出现时,来自任何一个 worker,将其返回以进行进一步处理。在这种情况下,循环打印结果,因为它们没有任何特定的顺序。

import multiprocessing

def calc(num):
    return num*2

pool = multiprocessing.Pool(5)
for output in pool.imap_unordered(calc, [1,2,3]):
    print 'output:',output
于 2014-06-11T18:29:04.167 回答