如何设置多处理中并发工作器的最大数量?



假设我们从vartec的答案开始,它显示了如何使用多处理worker:

import multiprocessing
def worker(procnum, return_dict):
'''worker function'''
print str(procnum) + ' represent!'
return_dict[procnum] = procnum

if __name__ == '__main__':
manager = multiprocessing.Manager()
return_dict = manager.dict()
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,return_dict))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print return_dict.values()

我想做同样的事情,只将并发进程的数量限制为 X。如何使用辅助角色来做到这一点?

使用池/地图并不是这里的最佳选择,因为我有一个这样的 for 循环:

for item in items:
result = heavy_lifting_which_cannot_be_parallelized(item)
process_result_in_a_way_that_can_be_parallelized(result)

因此,我想开始process_result_in_a_way_that_can_be_parallelized并继续我的 for 循环。不要等到for循环结束,然后进行多进程 - 这将更加耗时。

您不必将mapPool一起使用。可以使用apply_async按自己的计划将作业提交到池。

pool = multiprocessing.Pool(processes=3)
for i in range(30):
pool.apply_async(worker, (i, return_dict))
pool.close()
pool.join()
print return_dict.values()

相关内容

  • 没有找到相关文章

最新更新