2012-06-26 18 views
12

可能性の重複をマルチプロセッシング:私は多くのコアを持つコンピュータを使用していますし、パフォーマンス上の利点のために、私は本当につ以上を使用する必要があります
Python multiprocessing global variable updates not returned to parentグローバル変数とPythonは

。コードのこれらのビットは、私が期待して何をしない理由しかし、私は困惑している:

from multiprocessing import Process 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    jobs = [] 
    for i in xrange(5): 
     p = Process(target=test_func,args=(i,)) 
     jobs.append(p) 
     p.start() 

print var 

と同様に

from multiprocessing import Pool 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    p = Pool() 
    for i in xrange(5): 
     p.apply_async(test_func,[i]) 

print var 

私は結果が[1, 2, 3, 4, 5]ことを期待したが結果は[0, 1, 2, 3, 4]です。

プロセスでグローバル変数を使用する際に欠点があります。これはやり方ですか?このように変数を変更しようとするのは避けてください。

+0

この質問を見 http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide

+0

あなたからこれらのコードスニペットを実行していますスクリプトを実行したり、Pythonコンソール内で実行したりできますか? –

+1

マルチプロセッシングマネージャでリストを管理する必要があります。 – mgilson

答えて

関連する問題