Heim >Backend-Entwicklung >Python-Tutorial >Kann ein laufender Python-Thread ordnungsgemäß oder erzwungen gestoppt werden?
Kann ein laufender Thread abrupt beendet werden?
Obwohl dies im Allgemeinen kein guter Ansatz ist, ist es möglich, einen laufenden Thread in Python abrupt zu beenden . Dieser Ansatz ist jedoch nicht allgemein anwendbar.
Überlegungen zur ordnungsgemäßen Beendigung
Berücksichtigen Sie die folgenden Szenarien:
In diesen Fällen ist es besser, ein Exit_request-Flag zu verwenden, das regelmäßig vom Zielthread überprüft wird, um bei Bedarf einen Exit auszulösen.
Codebeispiel für eine ordnungsgemäße Beendigung:
import threading class StoppableThread(threading.Thread): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._stop_event = threading.Event() def stop(self): self._stop_event.set() def stopped(self): return self._stop_event.is_set()
Rufen Sie „stop()“ auf, wenn der Thread beendet werden soll, und schließen Sie dann „join()“ an, um sicherzustellen, dass es ordnungsgemäß funktioniert Beendigung.
Thread-Beendigung erzwingen
In bestimmten Fällen kann eine erzwungene Thread-Beendigung erforderlich sein. Erwägen Sie externe Bibliotheksaufrufe, die zu langen Verzögerungen führen.
Auslösen von Ausnahmen mit ThreadWithExc
Die ThreadWithExc-Klasse ermöglicht das Auslösen von Ausnahmen innerhalb eines Threads von einem anderen Thread:
def _async_raise(tid, exctype): # Raises an Exception (exctype) in thread with ID (tid) if not inspect.isclass(exctype): raise TypeError("Only types can be raised (not instances)") class ThreadWithExc(threading.Thread): def raise_exc(self, exctype): # Raises exctype in the context of the current thread _async_raise(self._get_my_tid(), exctype)
Beachten Sie, dass diese Methode nicht zuverlässig ist, wenn sich der Thread außerhalb des Python-Interpreters befindet. Stellen Sie sicher, dass der Thread die spezifische Ausnahme abfängt, um die erforderliche Bereinigung durchzuführen.
Das obige ist der detaillierte Inhalt vonKann ein laufender Python-Thread ordnungsgemäß oder erzwungen gestoppt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!