Variáveis globais e multiprocessamento do Python [duplicado]
Duplicata Possível:
Atualizações de variáveis globais de multiprocessamento Python não retornadas ao pai
Eu estou usando um computador com muitos núcleos e para benefícios de desempenho eu realmente deveria usar mais de um. No entanto, estou confuso porque esses bits de código não fazem o que eu esperava:
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
Assim como
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
Eu espero que o resultado seja[1, 2, 3, 4, 5]
mas o resultado é[0, 1, 2, 3, 4]
.
Deve haver alguma sutileza que estou perdendo ao usar variáveis globais com processos. Este é o caminho a percorrer ou devo evitar tentar alterar uma variável dessa maneira?