我想分享我的過程之間的字典如下之間的字典: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 –