Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie Thread-Beendigung und -Suspendierung in Python

So implementieren Sie Thread-Beendigung und -Suspendierung in Python

不言
不言Original
2018-09-11 15:59:425762Durchsuche
Der Inhalt dieses Artikels befasst sich mit der Implementierungsmethode zum Beenden und Anhalten von Threads. Ich hoffe, dass er für Freunde hilfreich ist.

Es gibt keine Methode, einen Thread zwangsweise zu beenden oder anzuhalten. Dies ist beabsichtigt, da das Schreiben von Thread-Programmen von Natur aus komplex ist. Beispiel: Wenn ein Thread eine Sperre erworben hat und er gezwungen wird, ihn zu beenden oder anzuhalten, bevor er die Sperre aufheben kann, führt dies zu einem Deadlock in der gesamten Anwendung. Darüber hinaus kann die Beendigung im Allgemeinen nicht einfach „alle Sperren aufheben“, da eine komplexe Thread-Synchronisierung häufig Sperr- und Löschsperrvorgänge umfasst und die Reihenfolge dieser Vorgänge bei der Ausführung sehr präzise sein muss.

Wenn Sie Dienste zum Beenden oder Aussetzen bereitstellen möchten, müssen Sie diese Funktionen selbst erstellen. Ein gängiger Ansatz besteht darin, den Thread in einer Schleife auszuführen, die regelmäßig den Status des Threads überprüft, um festzustellen, ob er beendet werden sollte. Zum Beispiel:
from threading import  Thread,Lock
class StoppableThread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self._terminate=False
        self._suspend_lock=Lock()

    def terminate(self):
        self._terminate=True

    def suspend(self):
        self._suspend_lock.acquire()

    def resume(self):
        self._suspend_lock.release()

    def run(self):
        while True:
            if self._terminate:
                break
            self._suspend_lock.acquire()
            self._suspend_lock.release()
            ...

Denken Sie daran, dass Threads sehr darauf achten sollten, keine blockierenden E/A-Vorgänge auszuführen, damit diese Methode zuverlässig funktioniert. Wenn beispielsweise ein Thread beim Warten auf das Eintreffen von Daten blockiert, wird er erst beendet, wenn der Vorgang aktiviert wird. Daher müssen Sie in der Praxis Timeouts, nicht blockierende E/A und andere erweiterte Funktionen verwenden, um sicherzustellen, dass Abschlussprüfungen häufig genug durchgeführt werden.

Verwandte Empfehlungen:

Detaillierte Erläuterung des Threadpool-Thread-Pool-Task-Beendigungsbeispielcodes in Python

Multithread-Threads und Threading in der Python-Implementierungsmethode

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Thread-Beendigung und -Suspendierung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn