我想并行执行一些进程并等到它们完成。所以我写了这段代码:
pool = mp.Pool(5)
for a in table:
pool.apply(func, args = (some_args))
pool.close()
pool.join()
我会func
在这里并行执行 5 个进程吗?还是唯一的选择是apply_async
?
我想并行执行一些进程并等到它们完成。所以我写了这段代码:
pool = mp.Pool(5)
for a in table:
pool.apply(func, args = (some_args))
pool.close()
pool.join()
我会func
在这里并行执行 5 个进程吗?还是唯一的选择是apply_async
?
文档对此非常清楚:每次调用apply
块,直到结果准备好。使用apply_async
.
另一种解决方案是使用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