2012-07-30 22 views
6

Tengo un programa que usa un hilo. Cuando mi programa está cerrado, mi hilo todavía se está ejecutando y eso es normal. Me gustaría saber cómo mi hilo puede detectar que el programa principal está terminado; por SÍ SOLO. ¿Como podría hacerlo?python: ¿Cómo detectar cuando mi hilo queda huérfano?

Mi hilo está en un bucle infinito y procesa muchos objetos en una cola. No puedo definir mi hilo como daemon, de lo contrario puedo perder algunos datos al final del programa principal. No quiero que mi programa principal establezca un valor booleano cuando se cierra.

Respuesta

4

Si puede obtener un control del hilo principal, puede llamar al is_alive() en él.

Como alternativa, puede llamar al threading.enumerate() para obtener una lista de todos los hilos que están activos actualmente, y verifique si el hilo principal está allí.

O si incluso eso es imposible, entonces es posible que pueda verificar si el subproceso secundario es el único subproceso no demoníaco restante.

+0

Gracias, resolvió mi problema. 'para el hilo en threading.enumerate(): si thread.getName() encuentra ("TrenzadoPrincipal") = -1:.! si thread.is_alive() = True: de impresión "TrenzadoPrincipal se detiene" demás : print "MainThread se está ejecutando" ' – user1528760

0

¿Funcionaría si su gerente rastreara la cantidad de hilos abiertos que había, entonces los niños se mataron a sí mismos cuando les faltaba la entrada? Entonces, el padre comenzaría a enviar datos a la cola y los trabajadores consumirían datos de la cola. Si un trabajador no encontró nada en la cola durante un cierto período de tiempo de espera, se mataría. El hilo principal luego rastrearía cuántos trabajadores estaban operando y comenzaría periódicamente nuevos trabajadores si la cantidad de trabajadores activos estuviera por debajo de un umbral determinado.

Cuestiones relacionadas