¿Cómo escribo correctamente en FIFOs en Python?

Algo muy extraño está sucediendo cuando abro FIFO (tuberías con nombre) en Python para escribir. Considere lo que sucede cuando intento abrir un FIFO para escribir en un intérprete interactivo:

>>> fifo_write = open('fifo', 'w')

La línea anterior se bloquea hasta que abro otro intérprete y escribo lo siguiente:

>>> fifo_read = open('fifo', 'r')
>>> fifo.read()

No entiendo por qué tuve que esperar a que se abriera la tubería para leer, pero omita eso. El código anterior se bloqueará hasta que haya datos disponibles como se esperaba. Sin embargo, digamos que vuelvo a la primera ventana del intérprete y escribo:

>>> fifo_write.write("some testing data\n")
>>> fifo_write.flush()

l comportamiento esperado es que en el segundo intérprete la llamada aread volverá y veremos los datos en la pantalla, excepto que no me está sucediendo. Si llamo aos.fsync sucede lo siguiente:

>>> import os
>>> fifo_write.flush()
>>> os.fsync(fifo_write.fileno())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument

Y el quinto lector todavía está esperando. Sin embargo, si llamo afifo_writer.close() entonces los datos se vacían. Si uso un comando de shell para alimentar la tubería:

$ echo "some data" > fifo

then la salida del lector es:

>>> fifo_read.read()
'some data\n'

¿Alguien ha experimentado esto? Si es así, ¿hay alguna solución para ello? Mi sistema operativo actual es Ubuntu 11.04 con Linux 2.6.38.

Respuestas a la pregunta(2)

Su respuesta a la pregunta