【python】threading模块之event
threading模块之event
python的 Event 对象用于线程间通信,即程序中的某一个线程需要通过判断另一个线程的状态来确定自己下一步的操作,这时就需要使用 event 对象。Event 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在初始情况下,Event 对象中的信号标志被设置为 False。如果有线程等待一个 Event 对象, 而这个 Event 对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。
一个线程如果将一个 Event 对象的信号标志设置为真,它将唤醒所有等待这个 Event 对象的线程。如果一个线程等待一个已经被设置为真的 Event 对象,那么它将忽略这个事件, 继续执行。
函数 | 说明 |
---|---|
event.isSet() | 返回 event 的状态值 |
event.wait() | 如果 event.isSet() == False 将阻塞线程 |
event.set() | 设置 event 的状态值为 True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度 |
event.clear() | 恢复 event 的状态值为 False |
import threading
import time
event = threading.Event()
def light():
print('红灯正亮着')
time.sleep(3)
event.set() # 模拟绿灯亮
def car(name):
print('车%s正在等绿灯' % name)
event.wait() # 模拟等绿灯的操作,此时event为False,直到event.set()将其值设置为True,才会继续运行
print('车%s通行' % name)
if __name__ == '__main__':
# 红绿灯
t1 = threading.Thread(target=light)
t1.start()
# 车
for i in range(3):
t = threading.Thread(target=car, args=(i,))
t.start()