[pyar] Stdout multiplexing multiplataforma

Lucas Liendo mindmaster en gmail.com
Lun Feb 1 05:50:36 ART 2016


Me olvide nuevamente de aclarar que estos procesos independientes no
necesariamente son scripts de Python. Pueden ser directamente binarios,
scripts de ruby, perl, etc. 100% de acuerdo con lo de experimentar, pero en
este caso en particular al saber que select no opera con objetos que no
sean sockets en Windows me hizo frenar todo prototipo y enviar la duda a la
lista :-). Una posible solucion que se me viene a la cabeza es utilizar 2
implementaciones diferentes. La de Linux + BSDs utilizaria sin problemas
select u otra tecnica de multiplexing. En Windows el multiplexing es
soportado mediante la API de Completion ports. Estuve jugando un poco (hace
algun tiempo atras) pero termine totalmente frustado al no lograr hacer
funcionar un ejemplito... Por ahi podria preguntar si alguien ha utilizado
con exito Completion ports en Python...



On Monday, February 1, 2016, Facundo Batista <facundobatista en gmail.com>
wrote:

> 2016-01-30 20:39 GMT-05:00 Lucas Liendo <mindmaster en gmail.com
> <javascript:;>>:
>
> > Te comento un poco mas la idea, el codigo simplemente no existe (o sea
> hasta
> > no tener la seguridad de que voy a poder leer asincronicamente desde cada
> > stdout no me conviene tirar una sola linea de codigo). La idea es esta :
>
> En general, eso es falso. Se llama "experimentar" :)
>
>
> > tengo un proceso padre que se encarga de disparar uno o mas procesos.
> Estos
> > procesos son totalmente independientes del padre en el sentido de que una
> > vez lanzados el proceso padre no espera por su finalizacion (ni siquiera
> le
> > importa si finalizan o no). Estos procesos que corren de forma
> independiente
> > tienen que tener la capacidad de comunicar sus salidas al proceso padre,
> sin
> > embargo estos procesos nunca terminarian (a menos que el proceso padre
> > decida terminarlos por la fuerza con un kill), simplemente cada tanto
> > (dependiendo de ciertas circunstancias) imprimen a la salida alguna
> > informacion en formato JSON. La idea es que ni bien alguno de estos
> procesos
> > escriben a stdout el proceso padre pueda procesar este JSON y ademas el
> > proceso padre nunca debe bloquearse a la espera de una salida en
> particular
> > (ya que otros procesos pueden a la vez haber escrito a stdout). Como te
> > comento previamente, cada proceso escribe de forma arbitraria un JSON
> cada
> > un intervalo de tiempo indeterminado...
>
> Además, tirar algo de código es una buena base para luego hacer
> preguntas más puntuales.
>
> Por ejemplo, ¿esto te sirve? ¿no? ¿por qué?
>
> """
> import multiprocessing
> import random
> import time
>
>
> def en_otro_proceso(cola, num):
>     time.sleep(random.random() * 3)  # esperar al azar entre 0 y 3 segundos
>     cola.put(num ** 2)
>     time.sleep(random.random() * 3)  # esperar al azar entre 0 y 3 segundos
>     cola.put(num ** 3)
>
>
> # generamos tres procesos, le pasamos una misma cola que luego escuchamos
> cola = multiprocessing.Queue()
> for i in range(3):
>     p = multiprocessing.Process(target=en_otro_proceso, args=(cola, i))
>     p.start()
>
> while True:
>     data = cola.get()
>     print("data", data)
> """
>
> Saludos,
>
> --
> .    Facundo
>
> Blog: http://www.taniquetil.com.ar/plog/
> PyAr: http://www.python.org/ar/
> Twitter: @facundobatista
> _______________________________________________
> pyar mailing list pyar en python.org.ar <javascript:;>
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 

Saludos,
Lucas.

Radar : http://radar-monitoring.readthedocs.org/en/latest/index.html
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160201/09214799/attachment-0001.html>


Más información sobre la lista de distribución pyar