gpt4 book ai didi

Python 在并行进程之间共享字典

转载 作者:太空狗 更新时间:2023-10-29 22:16:35 25 4
gpt4 key购买 nike

我想在我的进程之间共享一个字典,如下所示:

def f(y,x):
y[x]=[x*x]

if __name__ == '__main__':
pool = Pool(processes=4)
inputs = range(10)
y={}
result = pool.map(f,y,inputs)

y 返回 {}。我怎样才能让它发挥作用?

谢谢,

最佳答案

这看起来您正在使用 multiprocessing 模块。你没有说,这是一个重要的信息。

multiprocessing.Pool() 实例上的 .map() 函数有两个参数:一个函数和一个序列。将使用序列中的连续值调用该函数。

您不能在像 dict 这样的可变变量中收集值(在示例中,它是参数 y),因为您的代码将在多个不同的进程中运行。在另一个进程中将值写入 dict 不会将该值发送回原始进程。但是,如果您使用 Pool.map(),则其他进程会将每个函数调用的结果返回给第一个进程。然后您可以收集这些值来构建一个dict

示例代码:

import multiprocessing as mp

def f(x):
return (x, x*x)

if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
result = dict(pool.map(f, inputs))

result 设置为:{0:0, 1:1, 2:4, 3:9, 4:16, 5:25, 6:36, 7:49 , 8: 64, 9: 81}

让我们对其进行更改,而不是计算 x*x,而是将 x 提升为某种幂,并且将提供该幂。让我们让它接受一个字符串键参数。这意味着 f() 需要一个元组参数,其中元组将是 (key, x, p) 并且它将计算 x**p

import multiprocessing as mp

def f(tup):
key, x, p = tup # unpack tuple into variables
return (key, x**p)

if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
inputs = [("1**1", 1, 1), ("2**2", 2, 2), ("2**3", 2, 3), ("3**3", 3, 3)]
result = dict(pool.map(f, inputs))

如果您有多个序列并且需要将它们连接在一起以针对上述内容创建一个序列,请考虑使用 zip()itertools.product

关于Python 在并行进程之间共享字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025005/

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