多くのコアを搭載したコンピューターを使用していますが、パフォーマンスを向上させるには、複数のコアを使用する必要があります。ただし、これらのコードが期待どおりに機能しない理由がわかりません。
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]
です。
プロセスでグローバル変数を使用する際に、私が見逃している微妙な点があるに違いありません。これは進むべき道ですか、それともこの方法で変数を変更しようとするのを避けるべきですか?