Czy istnieje sposób sprawdzenia, czy wątek został zakończony normalnie, czy z powodu wyjątku?Kod zakończenia wątku Python
9
A
Odpowiedz
13
Jak wspomniano, otoki wokół klasy wątków mogą przechwycić ten stan. Oto przykład.
>>> from threading import Thread
>>> class MyThread(Thread):
def run(self):
try:
Thread.run(self)
except Exception as self.err:
pass # or raise
else:
self.err = None
>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
-1
Można ustawić niektóre zmienne globalne na 0, jeśli powodzenie, lub niezerowe, jeśli wystąpił wyjątek. To dość standardowa konwencja.
Należy jednak chronić tę zmienną za pomocą muteksu lub semafora. Możesz też upewnić się, że tylko jeden wątek kiedykolwiek napisze do niego, a wszyscy inni po prostu to przeczytają.
0
Mieć wyjątki funkcji catch wyjątków. (Możesz to zrobić za pomocą prostej funkcji zwijania, która po prostu wywołuje funkcję starego wątku wewnątrz bloku try
... except
lub . Wtedy pytanie staje się "jak przekazywać informacje z jednego wątku do drugiego" i wydaje mi się, że już wiesz, jak to zrobić.
Powiązane problemy
- 1. PhantomJS Crash - Kod zakończenia 126
- 2. W jakim wątku jest wywoływana operacja zakończenia?
- 3. Kod zakończenia delphi w bibliotece DLL
- 4. Kod zakończenia 139 podczas wykonywania odejmowania obrazów
- 5. Czy można uzyskać kod zakończenia z podpowłoki?
- 6. Zrzut wątku Python
- 7. Gniazdo nasłuchiwania w wątku python
- 8. Kod uruchomienia bez głównego wątku bloku
- 9. Jak dokładnie działa kod zakończenia aplikacji Java metody main()?
- 10. UIView blok animacji wstrzymuje zarówno animację, jak i kod zakończenia
- 11. Jak przechwycić kod zakończenia SQLPlus w skrypcie powłoki?
- 12. Komodo 7 lub 8 kod zakończenia dla django
- 13. wydrukuj kod zakończenia w cmd w systemie Windows OS
- 14. Jak zwrócić kod zakończenia z aplikacji konsoli VBScript
- 15. Python Mechanize + kod GAEpython
- 16. kod Python jak curl
- 17. Frustracje wątku - tworzenie wątku przekraczającego wartość SetMaxThreads
- 18. Jak zamknąć całą aplikację z wątku Python?
- 19. Wywołanie zwrotnego wątku
- 20. Kod bajtowy wykrywający język Python
- 21. Zdarzenie zakończenia animacji android
- 22. UITableView rozpoczęcia/zakończenia aktualizacji
- 23. Zdarzenie zakończenia wbudowanych tweetów?
- 24. Zakończenia linii w git
- 25. Jak usunąć obiekt wątku dynamicznego po zakończeniu samego wątku?
- 26. Dlaczego ten sam kod działa szybciej w wątku?
- 27. Kod sprawdzania Swing w wątku wysyłki zdarzeń w czasie wykonywania
- 28. Kod nie działa równolegle podczas używania wątku :: scoped
- 29. Uruchom kod na wątku UI bez obiektu kontrolnego obecny
- 30. GCC 4.5/Ubuntu 11.04 to kod auto-wątku?
0 Sukces może być dość standardową konwencją, ale czy "automat" nie byłby łatwiejszy w interpretacji mięsa? –
Nie musi to być globalne, jeśli mam podklasę wątku, potrzebna jest tylko zmienna składowa, która wskazywałaby na sukces. Właśnie zastanawiałem się, czy jest jakiś wbudowany sposób, aby to zrobić, jak kod wyjścia procesu. –
Wątki i stan globalny. Dwa świetne smaki tattat gsrat eogetherrrrrrrrrrrrrrrr Błąd segmentacji, rdzeń po cenach dumpingowych. – Glyph