2012-07-30 14 views
6

Mam program za pomocą wątku. Kiedy mój program jest zamknięty, mój wątek nadal działa i to jest normalne. Chciałbym wiedzieć, jak mój wątek może wykryć, że główny program został przerwany; TYLKO JEDYNIE. Jak to zrobić?python: Jak wykryć, kiedy moja nić zostanie sierotą?

Mój wątek znajduje się w nieskończonej pętli i przetwarza wiele obiektów w kolejce. Nie mogę zdefiniować mojego wątku jako demona, bo inaczej mogę utracić niektóre dane na końcu głównego programu. Nie chcę, aby mój główny program ustawiał wartość boolowską po jej zamknięciu.

Odpowiedz

4

Jeśli możesz uzyskać uchwyt do głównego wątku, możesz zadzwonić pod numer is_alive().

Można również zadzwonić pod numer threading.enumerate(), aby uzyskać listę wszystkich aktualnie istniejących wątków i sprawdzić, czy główny wątek jest w tym miejscu.

Jeśli nawet to jest niemożliwe, możesz sprawdzić, czy wątek podrzędny jest jedynym pozostałym wątkiem nie będącym demonem.

+0

Dzięki temu rozwiązałem mój problem. 'dla wątku threading.enumerate(): jeśli thread.getName() znaleźć ("MainThread") = -1.! jeśli thread.is_alive() = True: print "MainThread jest zatrzymany" indziej : print "MainThread działa" ' – user1528760

0

Czy to zadziałałoby, gdyby twój menedżer śledził, ile otwartych wątków było, a następnie dzieci zabiły się, gdy brakowało im wejścia? Tak więc rodzic zaczął przesyłać dane do kolejki, a pracownicy pobierałyby dane z kolejki. Jeśli pracownik nie znalazł niczego w kolejce przez pewien okres czasu, zabiłby się sam. Główna nić będzie wtedy śledzić liczbę pracowników i okresowo uruchamiać nowych pracowników, jeśli liczba aktywnych pracowników jest poniżej określonego progu.

Powiązane problemy