10.3.1 Event事件对象
2025年09月21日
10.3.1 Event事件对象
每执行一个事情,肯定有该事情的执行后状态,事件就是该事情发生的信号。在程序中,多线程之间需要通信,而事件就是为了方便线程之间的通信。
Python中提供了Event事件对象,用于线程间通信,它是由线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号接触。
Event事件处理的机制:全局定义了一个内置标志Flag,如果Flag值为False,那么当程序执行event.wait方法时就会阻塞;如果Flag值为True,那么程序执行event.wait方法时便不再阻塞。事件Event用于控制一个或多个进程同时进行堵塞或执行,可以让进程之间做到同时堵塞、同时进行,类似于一种断点的效果,常用于一种信号状态的传递。
Event事件常用的方法如表10-4所示。
表10-4 Event事件常用的方法
使用Event的set()方法可以设置Event事件对象内部的信号标志为真。Event对象提供了isSet()方法来判断其内部信号标志的状态。当使用Event对象的set()方法后,isSet()方法返回真。
使用Event对象的clear()方法可以清除Event对象内部的信号标志,即将其设为假,当使用Event的clear方法后,isSet()方法返回假。
如果标志为True将立即返回,否则阻塞线程至等待阻塞状态,等待其他线程调用set()。
Event其实就是一个简化版的Condition,但是Event没有锁,无法使线程进入同步阻塞状态。
【案例10-4】 利用事件触发红绿灯状态,控制车辆通行。
运行结果: