我想分享我的过程之间的字典如下之间的字典:Python的共享并行处理
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返回{}。我怎样才能使它工作?
感谢,
我想分享我的过程之间的字典如下之间的字典:Python的共享并行处理
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()
函数有两个参数:函数和序列。该函数将使用序列中的连续值调用。您正试图通过y
和一个序列,并且不起作用。
你可以像这样做一个序列:((y, x) for x in input)
,然后编写一个函数,它接受一个参数,一个元组,然后用它做正确的事情。
我只使用multiprocessing.Pool()
来运行读取和写入磁盘文件的进程,所以我不确定这里的基本思路是如何工作的:我不确定你是否可以像你正在尝试的那样改变字典。
我建议只将值从函数中传回来,然后收集它们以获得最终结果。我只是测试此代码,它的工作原理:
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的工作! –
什么是Redis? – Amir
http://www.google.com/search?q=redis –