2011-10-25 13 views
4

こんにちは私は、マルチプロセッシングを使用して並列に辞書の値を定義しようとしています。関数f()が「プール」の外で呼び出されると、辞書値が正しく設定されます。ただしプールコールでは失敗します。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

Iは、次いで、答えは参照:インポートプールのマルチプロセッシングから ヒット= {} デフF(X): リターンX 場合__name__ == '__main__': プール=プール(プロセス= 2) 入力= ['a'、b '、' c '] result = pool.map(f、inputs) result = dict(zip(result、result)) print result.items() – David

関連する問題