我正在使用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
都会返回一个巨大的对象。我可以在内存中存储这样的对象的N个实例,其中N~ cpu_count,但不会更多(不是数百个)。
现在,使用此函数会占用太多内存。内存完全花在主进程中,而不是工作进程中。
imap_unordered
如何存储完成的结果?我指的是已经由工作人员返回但尚未传递给用户的结果。我认为它很聪明,只根据需要“懒惰”地计算它们,但显然不是这样。
它看起来像是因为我不能足够快地使用process_parallel
的结果,池一直在某个地方从fnc
内部排队这些巨大的对象,然后爆炸。有没有办法避免这种情况?以某种方式限制其内部队列?
我使用的是Python2.7。干杯。
https://stackoverflow.com/questions/11174172
复制相似问题