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!