web-dev-qa-db-ja.com

グローバル変数とPython multiprocessing

可能性のある複製:
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]

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

16
user1475412

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