我正在使用multiprocessing.Pool()
并行化一些繁重的计算。
目标函数返回大量数据(一个巨大的列表)。我的内存快用完了。
如果没有multiprocessing
,我只需将目标函数更改为生成器,通过yield
一个接一个地生成结果元素,因为它们是计算出来的。
我知道多处理不支持生成器——它等待整个输出并立即返回,对吗?没有屈服。有没有办法让Pool
工作人员在数据可用时立即生成数据,而无需在 RAM 中构建整个结果数组?
简单的例子:
def target_fnc(arg):
result = []
for i in xrange(1000000):
result.append('dvsdbdfbngd') # <== would like to just use yield!
return result
def process_args(some_args):
pool = Pool(16)
for result in pool.imap_unordered(target_fnc, some_args):
for element in result:
yield element
这是 Python 2.7。