Pregunta

Process

He subclase de esta manera:

class EdgeRenderer(Process):
    def __init__(self,starter,*args,**kwargs):
        Process.__init__(self,*args,**kwargs)
        self.starter=starter

Entonces definir un método que utiliza run self.starter.

Ese objeto es starter de un State clase que defino.

¿Está bien que puedo hacer esto? ¿Qué ocurre con el objeto? ¿Se pone en serie? ¿Eso quiere decir que siempre tengo para asegurar el objeto es serializable State? ¿El nuevo proceso de obtener una copia duplicada de este objeto?

¿Fue útil?

Solución

En los sistemas UNIX, multiprocesamiento utiliza os.fork () para crear los niños, en las ventanas, que utiliza algunos trucos subproceso y la serialización de compartir los datos. Así que para ser multiplataforma, sí - que debe ser serializable. El niño recibirá una nueva copia.

Una vez dicho esto, he aquí un ejemplo:

from multiprocessing import Process
import time

class Starter(object):
    def __init__(self):
        self.state = False

x = Starter()

class EdgeRenderer(Process):
    def __init__(self,starter,*args,**kwargs):
        Process.__init__(self,*args,**kwargs)
        self.starter=starter
    def run(self):
        self.starter.state = "HAM SANDWICH"
        time.sleep(1)
        print self.starter.state

a = EdgeRenderer(x)
a.start()
x.state = True
a.join()
print x.state

Cuando se ejecuta, verá lo siguiente:

HAM SANDWICH
True

Así que los cambios de los padres hace que no consiga comunicada después de que el tenedor () y los cambios en el niño hace tener el mismo problema. Usted tiene que adherirse a la mesa limitaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top