[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