30

重複の可能性:
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]です。

プロセスでグローバル変数を使用する際に、私が見逃している微妙な点があるに違いありません。これは進むべき道ですか、それともこの方法で変数を変更しようとするのを避けるべきですか?

4

1 に答える 1

21

2 つの別個のプロセスを実行している場合、それらは同じグローバルを共有しません。プロセス間でデータを渡したい場合は、send と recv の使用を検討してください。あなたがしていることに似た例については、 http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes をご覧ください。

于 2012-06-26T20:52:52.183 に答える