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

Python在并行进程之间共享字典,python,multiprocessing,Python,Multiprocessing,我希望在我的进程之间共享字典,如下所示: def f(y,x): y[x]=[x*x] if __name__ == '__main__': pool = Pool(processes=4) inputs = range(10) y={} result = pool.map(f,y,

我希望在我的进程之间共享字典,如下所示:

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返回{}。我怎样才能让它工作


谢谢,

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

多处理.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

这听起来像是Redis的工作!如何向f添加一个或多个参数?我没有定义f(x,I):。。。。然后是pool.map(f,inputs,1),但python不喜欢它。它返回的f()正好包含两个参数
pool.map()
包含一个函数和一个序列。序列可以是元组或列表的序列,这就是传递附加参数的方式。我将再添加一个示例。如果您确实希望在进程之间拥有一个共享字典,请查看多处理模块中的Manager.dict。