2011-01-25 9 views
6

Piszę wielowątkową aplikację Python, która wykonuje wiele połączeń TCP z serwerami. Każde połączenie wykonuje się w osobnym wątku. Czasami wątek wisi na długi czas, którego nie chcę. Jak mogę sprawić, że wątek zabije się po pewnym określonym czasie? Z głównego wątku w jaki sposób mogę ustalić, że wątek potomny sam się zabił?Python: jak mogę uzyskać wątek, który zabije się po przekroczeniu limitu czasu?

Jeśli to możliwe, doceniłbym fragment kodu pokazujący, jak to zrobić. Dzięki.

Aktualizacja System Ubuntu 9:10

+0

Co masz na myśli przez zawieszenie? Jeśli to zawiesza się działanie sieci, nie możesz ustawić limitu czasu? –

+0

Tak Mogę ustawić limit czasu sieci, ale powoduje to inne problemy. Zobacz moje pytanie z wczoraj. Ta metoda bez limitu czasu działa dobrze dla większości hostów. Chciałbym tylko wiedzieć, jak zdobyć wątek, żeby się zabić. – VacuumTube

+0

Przeczytaj o threading.Timer "Wątek, który wykonuje funkcję po upływie określonego czasu minął." http://docs.python.org/library/threading.html#timer-objects. Na przykład. czy mógłbyś zrobić timer, zadzwonić do funkcji zamykającej wątek? –

Odpowiedz

4

Krótka odpowiedź: Tylko w biegu def() końca. Tak więc, jeśli czekasz na dane z gniazda, zrób to z limitem czasu, a następnie, jeśli wystąpi timeout, przerwij chwilę, którą powinieneś mieć, a wątek zostanie zabity.

Możesz sprawdzić z głównego wątku, czy wątek żyje przy pomocy metody isAlive().

+0

To naprawdę jedyny * rozsądny * sposób na zrobienie tego. – Arafangion

Powiązane problemy