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.
e=Event() 创建新的Event实例,并将内部标志设置为False。
e.is_set():只有当内部标志设为True时才返回True e.set():将内部标志设置为True。等待它变为True的所有线程都讲被唤醒。 e.clear():将内部标志重置为False。 e.wait(timeout):阻塞直到内部标志为True。如果调用时内部标志为True,此方法将立即返回。 否则,它将阻塞,直到另一个线程调用set()方法将标志设置为True,或者出现可选的超时时。
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
, um einen einfachen Thread-Pool in Python
zu implementierenDas 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!