2012-07-30 18 views
6

Ho un programma che utilizza una discussione. Quando il mio programma è chiuso, il mio thread è ancora in esecuzione e questo è normale. Mi piacerebbe sapere come il mio thread può rilevare che il programma principale è terminato; da solo SOLO. Come potrei farlo?python: come rilevare quando il mio thread diventa orfano?

Il mio thread è in un ciclo infinito ed elabora molti oggetti in una coda. Non riesco a definire il mio thread come un demone, altrimenti posso perdere alcuni dati alla fine del programma principale. Non voglio che il mio programma principale abbia impostato un valore booleano quando è stato chiuso.

risposta

4

Se è possibile ottenere un handle per il thread principale, è possibile chiamare is_alive() su di esso.

In alternativa, è possibile chiamare threading.enumerate() per ottenere un elenco di tutti i thread attualmente in vita e verificare se il thread principale è lì.

O se ciò è impossibile, è possibile verificare se il thread secondario è l'unico thread non demone rimanente.

+0

Grazie risolto il mio problema. 'per filettatura in threading.enumerate(): se thread.getName() trovare ("MainThread") = -1:.! se thread.is_alive() = True: print "MainThread viene arrestato" altro : stampa "MainThread è in esecuzione" ' – user1528760

0

Funzionerebbe se il tuo manager tenesse traccia di quanti thread aperti esistessero, quindi i bambini si sono uccisi mentre affamati di input? Quindi il genitore inizierebbe a spingere i dati in coda e gli operai consumerebbero i dati dalla coda. Se un lavoratore non ha trovato nulla in coda per un certo periodo di timeout, si ucciderebbe da solo. Il thread principale dovrebbe quindi tracciare il numero di lavoratori attivi e avviare periodicamente nuovi lavoratori se il numero di lavoratori attivi era sotto una determinata soglia.

Problemi correlati