This article brings you an introduction to the usage of events under Python threads. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Events are used to communicate between threads. One thread sends an [event] signal, and one or more other threads wait for it.
The Event instance manages an internal flag, which can be set to True using the set() method, or reset to False using the clear() method. The wait() method will block until the flag is True.
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()
The above code should be avoided as much as possible, because this code is unreliable, because between the evt.wait() and evt.clear() operations, the producer may produce a New item. However, with clear events, consumers may not see a new item until the producer creates it. The best case scenario is that the program will go through a short pause and processing of the item will be inexplicably delayed. The worst case scenario is that the entire program will hang due to the loss of the event signal. To solve this kind of problem, it's better to use condition variables.
Related recommendations:
A brief introduction to Python multi-threaded programming
##Detailed explanation of python multi-threading, locks, and event event mechanisms Simple use
#Use Python to implement a simple thread pool
The above is the detailed content of A brief introduction to event usage under Python threads. For more information, please follow other related articles on the PHP Chinese website!