thread procesos paralelo multitarea hilos example ejemplos python queue

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 de multiprocessing 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.