Clase de Python que hereda el multiprocesamiento, problemas para acceder a los miembros de la clase

En resumen, digamos que tengo lo siguiente:

import multiprocessing class Worker(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) print "Init" self.value = None def run(self): print "Running" self.value = 1 p = Worker() p.start() p.join() print p.value 

Espero que la salida sea:

 Init Running 1 

En cambio es

 Init Running None 

¿Puede alguien explicarme por qué este es el caso? ¿Qué es lo que no entiendo y cómo debo hacer para hacerlo correctamente?

Gracias.

En el momento en que dices p.start() , un proceso separado se desvía del proceso principal. Todos los valores variables se copian. Así que el proceso principal tiene una copia de p , y el proceso bifurcado tiene una copia separada de p . El Worker modifica la copia de p.value del proceso bifurcado, pero el p.value del proceso principal aún es None .

Hay muchas formas de compartir objetos entre procesos. En este caso, quizás la forma más fácil es usar un mp.Valor :

 import multiprocessing as mp class Worker(mp.Process): def __init__(self): print "Init" mp.Process.__init__(self) self.num = mp.Value('d', 0.0) def run(self): print "Running" self.num.value = 1 p = Worker() p.start() p.join() print p.num.value 

Tenga en cuenta que el valor de mp.Value tiene un valor predeterminado de 0.0 . No se puede establecer en None .