[pyar] Stdout multiplexing multiplataforma

Facundo Batista facundobatista en gmail.com
Dom Ene 31 22:33:03 ART 2016


2016-01-30 20:39 GMT-05:00 Lucas Liendo <mindmaster en gmail.com>:

> 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


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