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?
mirada a esta pregunta http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide
¿Está ejecutando estos fragmentos de código de un script, o ejecutar dentro de una consola de Python? –
Debe gestionar su lista con un administrador de multiprocesamiento. – mgilson