我正在使用map_async来处理返回大量数据的进程。正常的map_async导致数据存储在内存中,然后在处理完所有内容时返回。为了解决这个问题,我使用了以下的发电机方法:
Combining itertools and multiprocessing?
然而,这并没有充分利用多线程(如果你有29个线程完成,1个线程挂起,它将不会启动下一批作业,直到每个人都完成)。有没有办法让map_async或者是否存在类似的函数,它会在每个线程完成时将其返回值发送回回函数?
答案 0 :(得分:0)
您想要的是使用基于生产者 - 消费者的解决方案。生产者将任务放在multiprocessing.Queue
中,消费者(子流程)在循环中获取并处理它们。
This是一个很好的SO问题,有一个(详细的)可能的解决方案。