gpt4 book ai didi

python - 使用 Python 多处理模块在多个进程之间共享状态

转载 作者:行者123 更新时间:2023-12-01 05:55:47 25 4
gpt4 key购买 nike

我有一个函数可以进行计算并将计算状态保存在 result 字典中(默认默认参数)。我首先运行它,然后使用多处理模块运行多个进程。我需要在每个并行进程中再次运行该函数,但是在该函数运行一次后,我需要返回缓存状态,不得重新计算该值。这个要求在我的例子中没有意义,但我想不出一个需要这种限制的简单现实论证。使用字典作为可变默认参数是可行的,但是这不适用于多处理模块。我可以使用什么方法来获得相同的效果?

请注意,状态值(包含类值的字典)不能作为参数传递给多个进程。

SO问题Python multiprocessing: How do I share a dict among multiple processes?似乎涵盖了类似的内容。也许我可以使用 Manager 来做我需要的事情,但如何做并不明显。或者,也许可以根据 https://stackoverflow.com/a/4534956/350713 将值保存到全局对象中。 ,但这看起来不太优雅。

def foo(result={}):
if result:
print "returning cached result"
return result
result[1] = 2
return result

def parafn():
from multiprocessing import Pool
pool = Pool(processes=2)
arglist = []
foo()
for i in range(4):
arglist.append({})
results = []
r = pool.map_async(foo, arglist, callback=results.append)
r.get()
r.wait()
pool.close()
pool.join()
return results

print parafn()

更新:感谢您的评论。我现在有一个工作示例,发布在下面。

最佳答案

我认为进程之间交换数据最安全的方式是使用队列,多处理模块为您提供了两种类型的队列和JoinableQueue,请参阅文档:

http://docs.python.org/library/multiprocessing.html#exchanging-objects-between-processes

关于python - 使用 Python 多处理模块在多个进程之间共享状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12663159/

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