我有一个函数可以进行计算并将计算状态保存在result
字典中(默认默认参数)。我首先运行它,然后使用多处理模块运行几个进程。我需要在每个并行进程中再次运行该函数,但是在该函数运行一次后,我需要返回缓存状态,不得重新计算该值。这个要求在我的例子中没有意义,但我想不出一个简单的现实论点需要这个限制。使用 dict 作为可变默认参数有效,但这不适用于多处理模块。我可以使用什么方法来获得相同的效果?
请注意,状态值是不能作为参数 afaik 传递给多个进程的东西(包含类值的字典)。
SO问题Python多处理:如何在多个进程之间共享一个字典?似乎涵盖了类似的领域。也许我可以使用 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()
更新:感谢您的评论。我现在有一个工作示例,发布在下面。