并发编程-进~线程-05event事件
一丶什么是event事件
通过判断某个线程的状态来确定自己下一步的操作
如果有线程等待一个Event对象, 而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程。如果一个线程等待一个已经被设置为真的Event对象,那么它将忽略这个事件, 继续执行
二丶event事件方法
-
event.isSet():返回event的状态值;
-
event.wait():如果 event.isSet()==False将阻塞线程;
-
event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
-
event.clear():恢复event的状态值为False。
三丶event事件的代码
from threading import Event,Thread
import time
# 先生成一个event对象
e = Event()
def light():
print('红灯正亮着')
time.sleep(3)
e.set() # 发信号
print(e.isSet())
# e.clear()
# print(e.isSet())
print('绿灯亮了')
# print(e.set())
def car(name):
print('%s正在等红灯'%name)
e.wait() # 等待信号
# print(e.isSet())
e.clear()
print(e.isSet())
print('%s加油门飙车了'%name)
t = Thread(target=light)
t.start()
for i in range(10):
t = Thread(target=car,args=('伞兵%s'%i,))
t.start()