Pregunta

El módulo de subproceso de Python de forma predeterminada pasa todos los descriptores de archivos abiertos a los procesos secundarios que genera. Esto significa que si el proceso principal está escuchando en un puerto y se cancela, no se puede reiniciar y comenzar a escuchar nuevamente (incluso utilizando SO_REUSEADDR) porque el niño todavía está en posesión de ese descriptor. No tengo control sobre el proceso hijo.

El constructor de POpen de subproceso acepta un argumento close_fds, que cerraría los descriptores en el hijo, tal como quiero. Sin embargo, hay una restricción, solo en Windows, que evita que se use si también se anulan stdin / stdout, lo que debo hacer.

¿Alguien sabe de una solución para esto en Windows?

¿Fue útil?

Solución

Lo que parece ser la información más relevante que puedo encontrar: SetHandleInformation , que se menciona en este artículo , debe darle consejos.

Probablemente necesitará usar pywin32 y / o ctypes para lograr lo que quiere.

Otros consejos

No tengo un cuadro de ventanas alrededor, así que esto no está probado, pero estaría tentado de probar los métodos os.dup y os.dup2; duplique los descriptores de archivo y use esos en lugar de los principales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top