Python multiprocesamiento: El envío de datos a un proceso de
-
13-09-2019 - |
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?
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.