Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Einführung in die Verwendung von Ereignissen unter Python-Threads

Eine kurze Einführung in die Verwendung von Ereignissen unter Python-Threads

不言
不言Original
2018-09-11 16:09:141746Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Verwendung von Ereignissen unter Python-Threads. Ich hoffe, dass er für Freunde hilfreich ist.

Ereignisse werden zur Kommunikation zwischen Threads verwendet. Ein Thread sendet ein [Ereignis]-Signal und ein oder mehrere andere Threads warten darauf.

Die Event-Instanz verwaltet ein internes Flag, das mit der Methode set() auf True gesetzt oder mit der Methode clear() auf False zurückgesetzt werden kann. Die Methode wait() blockiert, bis das Flag True ist.

Syntax:

e=Event()
创建新的Event实例,并将内部标志设置为False。

Gemeinsame Methoden:

e.is_set():只有当内部标志设为True时才返回True

e.set():将内部标志设置为True。等待它变为True的所有线程都讲被唤醒。

e.clear():将内部标志重置为False。

e.wait(timeout):阻塞直到内部标志为True。如果调用时内部标志为True,此方法将立即返回。
否则,它将阻塞,直到另一个线程调用set()方法将标志设置为True,或者出现可选的超时时。

Hinweis

Obwohl Ereignisobjekte zum Senden von Signalen an andere Threads verwendet werden können, sollten sie nicht zu deren Implementierung verwendet werden in Hersteller- und Verbraucherbenachrichtigungen, wie zum Beispiel der folgende Code:
evt=Event()

def producer():
    while True:
        #生产项
        ...
        evt.signal()
def consumer():
    while True:
        #等待一个项
        evt.wait()
        #消费项
        ...
        #清除事件并再次等待
        evt.clear()

Der obige Code sollte so weit wie möglich vermieden werden, da dieser Code unzuverlässig ist, da zwischen den Operationen evt.wait() und evt.clear() die Der Hersteller kann einen neuen Artikel produzieren. Bei eindeutigen Ereignissen kann es jedoch sein, dass Verbraucher einen neuen Artikel erst dann sehen, wenn der Hersteller ihn erstellt. Im besten Fall macht das Programm eine kurze Pause und die Verarbeitung des Artikels verzögert sich aus unerklärlichen Gründen. Im schlimmsten Fall bleibt das gesamte Programm aufgrund des Verlusts des Ereignissignals hängen. Um diese Art von Problem zu lösen, ist es besser, Bedingungsvariablen zu verwenden.

Verwandte Empfehlungen:

Eine kurze Einführung in die Python-Multithread-Programmierung

Detaillierte Erklärung des Python-Multithreadings, Sperren und Ereignismechanismen Verwenden Sie einfach

, um einen einfachen Thread-Pool in Python

zu implementieren

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in die Verwendung von Ereignissen unter Python-Threads. 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