我将 map_async 与返回大量数据的进程一起使用。正常的 map_async 导致数据存储在内存中,然后在处理完所有内容后返回。为了解决这个问题,我使用了一种生成器方法:
但是,这并没有充分利用多线程(例如,如果您完成了 29 个线程和 1 个线程挂起,则在每个人都完成之前它不会开始下一批作业)。有没有办法拥有 map_async 或者是否存在类似的函数,它将在每个线程完成时将其返回发送到回调函数?
我将 map_async 与返回大量数据的进程一起使用。正常的 map_async 导致数据存储在内存中,然后在处理完所有内容后返回。为了解决这个问题,我使用了一种生成器方法:
但是,这并没有充分利用多线程(例如,如果您完成了 29 个线程和 1 个线程挂起,则在每个人都完成之前它不会开始下一批作业)。有没有办法拥有 map_async 或者是否存在类似的函数,它将在每个线程完成时将其返回发送到回调函数?
您想要的是使用基于生产者-消费者的解决方案。生产者将任务放入 amultiprocessing.Queue
中,消费者(子进程)在循环中获取并处理它们。
这是一个很好的 SO 问题,有一个(详细的)可能的解决方案。