我正在使用multiprocessing.imap_unordered
对值列表执行计算:
def process_parallel(fnc, some_list):
pool = multiprocessing.Pool()
for result in pool.imap_unordered(fnc, some_list):
for x in result:
yield x
pool.terminate()
根据设计,每次调用fnc
都会返回一个 HUGE 对象。我可以将此类对象的 N 个实例存储在 RAM 中,其中 N ~ cpu_count,但不多(不是数百个)。
现在,使用这个函数会占用太多内存。内存完全用在主进程中,而不是在工人中。
如何imap_unordered
存储完成的结果?我的意思是工作人员已经返回但尚未传递给用户的结果。我认为它很聪明,只根据需要“懒惰地”计算它们,但显然不是。
看起来因为我不能process_parallel
足够快地消耗结果,池不断地从fnc
某个地方排队这些巨大的对象,内部,然后爆炸。有没有办法避免这种情况?以某种方式限制其内部队列?
我正在使用 Python2.7。干杯。