gpt4 book ai didi

python - 大数据多处理

转载 作者:IT老高 更新时间:2023-10-28 20:22:31 26 4
gpt4 key购买 nike

我正在使用 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。

最佳答案

这听起来像是队列的理想用例:http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes

只需将您的结果从池中的工作人员中输入队列,然后将它们摄取到主服务器中。

请注意,除非您排空队列的速度几乎与工作人员填充队列的速度一样快,否则您仍然可能会遇到内存压力问题。您可以限制队列大小(队列中可容纳的最大对象数),在这种情况下,池中的工作人员将阻塞 queue.put 语句,直到队列中有可用空间。这将对内存使用设置上限。 但是如果你这样做,可能是时候重新考虑你是否需要池化和/或使用更少的 worker 是否有意义。

关于python - 大数据多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com