Programa de Python que usa el problema os.pipe y os.fork ()

Recientemente he necesitado escribir un script que realice una os.fork () para dividir en dos procesos. El proceso secundario se convierte en un proceso de servidor y devuelve datos al proceso principal utilizando una tubería creada con os.pipe (). El niño cierra el'r' final de la tubería y el padre cierra el'w' final de la tubería, como siempre. Convierto los retornos de pipe () en objetos de archivo con os.fdopen.

El problema que tengo es este: el proceso se bifurca con éxito y el niño se convierte en un servidor. Todo funciona muy bien y el niño escribe obedientemente los datos en open'w' final de la tubería. Lamentablemente, el extremo principal de la tubería hace dos cosas extrañas:
A) Bloquea en laread() operación en el'r' final de la tubería.
n segundo lugar, no puede leer los datos que se pusieron en la tubería a menos que'w' end está completamente cerrado.

nmediatamente pensé que el problema era el almacenamiento en búfer y agregué pipe.flush () llama, pero esto no ayudó.

¿Alguien puede arrojar algo de luz sobre por qué los datos no aparecen hasta que el final de la escritura está completamente cerrado? ¿Y hay una estrategia para hacer que laread() llamada sin bloqueo?

Este es mi primer programa de Python que bifurcó o usó tuberías, así que perdóneme si he cometido un simple error.

Respuestas a la pregunta(8)

Su respuesta a la pregunta