Recientemente he necesitado escribir un script que realiza un os.fork() para dividirlo en dos procesos. El proceso secundario se convierte en un proceso de servidor y transfiere los datos al proceso principal utilizando un conducto creado con os.pipe(). El hijo cierra el extremo 'r'
de la tubería y el padre cierra el extremo 'w'
de la tubería, como de costumbre. Convierto los retornos de pipe() en objetos de archivo con os.fdopen.Programa de Python que usa os.pipe y os.fork() problema
El problema que estoy teniendo es esto: el proceso se bifurca con éxito, y el niño se convierte en un servidor. Todo funciona muy bien y el niño escribe diligentemente los datos en el extremo abierto de la tubería 'w'
. Lamentablemente, el extremo inicial de la tubería hace dos cosas extrañas:
A) Bloquea en la operación read()
en el extremo 'r'
de la tubería.
En segundo lugar, no puede leer los datos que se colocaron en el conducto a menos que el extremo 'w'
esté completamente cerrado.
Inmediatamente pensé que el problema era el almacenamiento en búfer y agregué pipe.flush() llamadas, pero estas no ayudaron.
¿Alguien puede arrojar algo de luz sobre por qué los datos no aparecen hasta que el final de la escritura está completamente cerrado? ¿Y existe una estrategia para hacer que la llamada read()
no bloquee?
Este es mi primer programa de Python que bifurcó o usó tuberías, así que perdónenme si cometí un simple error.
Por qué no está usando el módulo subproceso? –
Pensé que el módulo de subproceso era para invocar un comando. Estoy bifurcando con dos ramas de código, una para el niño y otra para el padre. – Paradox
¿Podría publicar algún código? –