Python multiprocessing global variable updates not returned to parent
I am using a computer with many cores and for performance benefits I should really use more than one. However, I'm confused why these bits of code don't do what I expect:
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
As well as
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
I expect the result to be
[1, 2, 3, 4, 5] but the result is
[0, 1, 2, 3, 4].
There must be some subtlety I'm missing in using global variables with processes. Is this even the way to go or should I avoid trying to change a variable in this manner?