procesos - python 2 multiprocessing
Cola de Python y cola de multiprocesamiento: ¿cómo se comportan? (1)
Este código de ejemplo funciona (puedo escribir algo en el archivo):
from multiprocessing import Process, Queue
queue = Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
en su lugar, este otro ejemplo no: (errormsg: el objeto ''módulo'' no se puede llamar)
import Queue
queue = Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
esta otra muestra no (no puedo escribir algo en el archivo):
import Queue
queue = Queue.Queue()
def _printer(self, queue):
queue.put("hello world!!")
def _cmdDisp(self, queue):
f = file("Cmd.log", "w")
print >> f, queue.get()
f.close()
¿Alguien puede explicar las diferencias? y el derecho a hacer?
Para su segundo ejemplo, ya dio la explicación usted mismo --- La Queue
es un módulo, que no se puede llamar.
Para el tercer ejemplo: asumo que usa Queue.Queue
junto con multiprocessing
. Una Queue.Queue
no será compartida entre procesos. Si se declara Queue.Queue
antes de los procesos, cada proceso recibirá una copia del mismo, que será independiente de los demás procesos. Los elementos colocados en la Queue.Queue
por el padre antes de comenzar a los niños estarán disponibles para cada niño. Los elementos colocados en la Queue.Queue
por el padre después de iniciar el hijo solo estarán disponibles para el padre. Queue.Queue
está hecho para el intercambio de datos entre diferentes hilos dentro del mismo proceso (usando el módulo de threading ). Las colas de multiprocesamiento son para el intercambio de datos entre diferentes procesos de Python. Si bien la API parece similar (está diseñada para ser así), los mecanismos subyacentes son fundamentalmente diferentes.
-
multiprocessing
colas demultiprocessing
intercambian datos mediante el decapado (serialización) de objetos y el envío a través de canalizaciones. -
Queue.Queue
utiliza una estructura de datos que se comparte entre subprocesos y bloqueos / mutex para el comportamiento correcto.