[pyar] clonar un pipe
Luciano Bello
lbello en gmail.com
Mar Oct 12 15:04:10 ART 2010
2010/10/11 Alejandro Santos <listas en alejolp.com>:
> 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).
Muchas gracias por tu sugerencia. Una versión testeada:
def clone_pipe(r1,w1):
(r2,w2)=os.pipe()
data=''
while True:
try:
data+=os.read(r1,2**16)
except: break
os.write(w1, data)
os.write(w2, data)
return (r2,w2)
clone_pipe tiene que correr mutex con el write, cosa que se da en mi
código grande.
El while es en caso de que esté extendido el PIPE_BUFFERS. Parece
hacer lo que quiero. Y parece hacerlo lo suficientemente rápido. No
estoy seguro si es del todo óptimo, pero funciona de momento.
Gracias a todos los que aportaron al hilo. Han sido muy amables...
saludos, luciano
More information about the pyar
mailing list