假设我们从 vartec 的 answer 开始它展示了如何使用多处理 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。我如何使用worker来做到这一点?
使用 pool/map 并不是真正的最佳选择,因为我有一个像这样的 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 循环结束后再进行多进程 - 这会更耗时。
最佳答案
您不必使用map
与 Pool
。您可以使用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()
关于python - 如何设置多处理中的最大并发工作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288029/