事件Event:
同进程的一样,线程的一个关键特性是每个线程都是独立运行且状态不可预测。如果程序中的其他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。
在初始情况下,Event对象中的信号标志被设置为false。如果有线程等待一个Event对象, 而这个Event对象的标志为false,那么这个线程将会被一直阻塞直至该标志为真。一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程。如果一个线程等待一个已经被设置为真的Event对象,那么它将忽略这个事件,继续执行。
Event方法:
1、event.isSet():当且仅当内部标志为 True
时返回 True
。
2、event.set():将内部标志设置为 True
。所有等待它成为 True
的线程都被唤醒。当标志保持在 True
的状态时,线程调用 wait()
是不会阻塞的。
3、event.clear():将内部标志重置为 False
。随后,调用 wait()
的线程将阻塞,直到另一个线程调用 set()
将内部标志重新设置为 True
。
4、event.wait():阻塞直到内部标志为真。如果内部标志在 wait()
方法调用时为 True
,则立即返回。否则,则阻塞,直到另一个线程调用 set()
将标志设置为 True
,或发生超时。
红绿灯示例:
执行结果:
Original: https://www.cnblogs.com/sunnytomorrow/p/13529061.html
Author: NorthFeng
Title: Python–Event
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590699/
转载文章受原作者版权保护。转载请注明原作者出处!