【发布时间】:2013-01-18 14:16:12
【问题描述】:
我正在使用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。
【问题讨论】:
标签: python multiprocessing generator