[pyar] clonar un pipe

Alejandro Santos listas en alejolp.com
Lun Oct 11 12:43:41 ART 2010


2010/10/11 Luciano Bello <lbello en gmail.com>:
> 2010/10/11 Alejandro Santos <listas en alejolp.com>:
>> Para lograr lo que andas buscando necesitas convertirlo a un buffer de
>> 1 productor 2 consumidores, con la caracteristica que los dos
>> consumidores obtengan los mismos datos con cada llamada de read.
>
> Perdón! detalle que me faltó. No necesito que sea 1 productor dos
> consumidores, sino que (r1,w1) y (r2,w2) sean totalmente
> independientes, dos pipes distintos. Solo que "con el mismo
> contenido".
>

Ah, ahora es diferente. Suponiendo que no hubo fork(), que no hay otro
proceso intentando escribir en w1, y que r1 tiene datos dentro,
clone_pipe puede llegar a ser algo como:

def clone_pipe(r1, w1):
  (r2,w2,) = os.pipe()
  initial = os.read(r1, 2**16)
  os.write(w1, initial)
  os.write(w2, initial)
  return (r2, w2,)

No lo probé y seguro se me escapó algo, pero me imagino que deberia
venir por ese lado. Si r1 no tiene nada dentro hay deadlock, habria
que setear el flag de non-blocking o usar select (suponiendo que no
estas en Windows).

-- 
Alejandro Santos
http://alejolp.com.ar



More information about the pyar mailing list