2012-06-26 16 views
12

Duplicar posibles:
Python multiprocessing global variable updates not returned to parentGlobals variables y Python multiprocesamiento

que estoy usando una computadora con muchos núcleos y para los beneficios de rendimiento realmente debería utilizar más de uno. Sin embargo, estoy confundido por qué estas piezas de código no hacen lo que espero:

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í 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 

espero que el resultado sea [1, 2, 3, 4, 5] pero el resultado es [0, 1, 2, 3, 4].

Debe haber cierta sutileza en el uso de variables globales con los procesos. ¿Es este el camino a seguir o debería evitar intentar cambiar una variable de esta manera?

+0

mirada a esta pregunta http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide

+0

¿Está ejecutando estos fragmentos de código de un script, o ejecutar dentro de una consola de Python? –

+1

Debe gestionar su lista con un administrador de multiprocesamiento. – mgilson

Respuesta