2011-10-25 125 views
4

您好我正在嘗試使用多處理並行定義字典的值。當函數f()在「pool」之外被調用時,字典值被正確設置。然而在池調用中,它失敗了。Python中的多線程/處理

我在做什麼錯?謝謝。

from multiprocessing import Pool 

hits={} 
def f(x): 
    hits[x] = x #this will involve a complex operation 

f('000') 
print hits['000'] 

if __name__ == '__main__': 
    pool = Pool(processes=2)    
    inputs = ['a','b','c'] 
    result = pool.map(f, inputs) 
print hits['a'] 
+0

進程之間共享狀態很困難。也許在子進程中執行復雜的操作並在父進程中維護'命中'的全局狀態。 –

回答

7

您生成了一堆繼承當前值hits的子進程。每個子進程都獲得自己的副本hits並對其進行修改,然後退出,刪除hits的進程本地副本。

multiprocessing.Pool.map()的預期用途是使用它的返回值,這是你忽略的。每個進程都可以返回hits的副本,並最終加入這些副本。

+0

我看到,則回答是:從多處理進口普爾 命中= {} DEF F(X): 返回X 如果__name__ == '__main__': 池=普爾(進程= 2) 輸入= ['a','b','c'] result = pool.map(f,inputs) result = dict(zip(result,result)) print result.items – David