Por favor necesito ayuda urgente avanzada

Miguel Araujo muchochini en gmail.com
Mie Feb 20 23:33:19 CET 2008


Hola a todos,

Estoy haciendo una práctica desde hace un par de semanas cuya entrega es
para este viernes y casi está todo planteado. Ya van varias preguntas que me
ha respondido la gente y me han ayudado a progresar, muchas gracias.
Mi problema es sencillo de explicar. Tengo un proceso que crea diversos
hilos, estos hilos tienen semáforos, sockets con otros procesos... tela! El
problema es que como leí que los hilos no pueden capturar interrupciones de
teclado. Hice el siguiente apaño.

El proceso padre hace un fork y se queda esperando .wait() al hijo, si ve
que se produce un CTRL^c manda al hijo una señal SIGQUIT para que cierre,
porque él se va a morir.

El hijo mientras tanto a creado unos 7 u 8 threads de media. Tiene una lista
con "punteros" a esos hilos para poder hacer .join() a cada uno. El problema
es que los hilos no se mueren porque están en llamadas bloqueantes de
sockets. Así que con un signal.signal seteo un handler que cierra los
sockets y luego se queda haciendo joins para después cuando acabe hacer un
exit(0) .Los hilos detectan que los sockets se han cerrado por medio de la
excepción EOFError y hacen un exit en tal caso.

El problema es que hay hilos que se mueren tarde, y después de liberar la
shell al pulsar una tecla otro hilos avisa de que ha muerto. Siento no poder
ser más claro, pero la concurrencia en Python se me está atravesando.
En resumen algún consejo sobre cómo conseguir cerrar el proceso
decentemente, algún truco o algo por el estilo.

Gracias por leerlo, Un saludo
        Miguel
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es