2013-04-11 98 views
1

我使用map_async和返回大量数据的进程。正常的map_async导致数据存储在内存中,然后在处理所有内容时返回。为了解决这个问题,我用来自发电机的办法:map_async完成后立即执行回调

Combining itertools and multiprocessing?

然而,这并没有充分利用多线程的(如,如果你有29个线程完成,1个命悬一线,直到每个人都完成后,它才会开始下一批工作)。有没有办法让map_async或者是否存在一个类似的函数,当每个线程完成时它会将其返回值发送到回调函数?

+0

不清楚你是使用线程还是子进程? – shx2 2013-04-11 17:52:11

+0

我正在使用子流程。我认为使用apply_async虽然是我正在寻找。 – Chrismit 2013-04-12 03:57:30

回答

0

你想要的是使用基于生产者 - 消费者的解决方案。生产者将任务放入multiprocessing.Queue中,并且消费者(子过程)以循环方式获取并处理它们。

This是一个很好的问题与(详细的)可能的解决方案。