event = threading.Event() #创建同步对象
event.wait() #同步对象等待状态
event.set() #同步对象设置True
event.clear() #清除同步对象
event.wait() --->捕捉到 event.set() ---> 继续执行 --->event.clear() 清除对象
例子:
import threading,time
class Boss(threading.Thread):
def run(self):
print("BOSS:今晚大家都要加班到22:00。") #7 假如继续运行到这了
print(event.isSet()) #8 打印下当前设定状态False
event.set() #9 设置为True
time.sleep(5) #12 睡眠5秒
print("BOSS:<22:00>可以下班了。") #16 打印此消息
print(event.isSet())
event.set() #17 设置event.set()为True状态,让线程中的event.wait()中捕捉
class Worker(threading.Thread): #5 假如运行到这
def run(self):
event.wait() #6 event.wait()等待event.set() 这时候这里是等待状态后面不执行 #11 此时5个Worker线程会捕捉到event.set()为True状态,会继续开始接着后面执行
print("Worker:哎……命苦啊!") #12 5个线程机会同时打印这个消息
time.sleep(1) #13 5个线程开始睡眠1
event.clear() #14 清除event.set()状态 此时event.set()为 False
event.wait() #15 event.wait()等待event.set() 这时候这里是等待状态后面不执行 #18 捕捉到event.set()为True状态,继续开始接着后面执行
print("Worker:OhYeah!")
if __name__=="__main__":
event=threading.Event() #1 创建对象
threads=[]
for i in range(5): #2 5 Worker对象放入到列表
threads.append(Worker())
threads.append(Boss()) #3 Boss对象放入列表
for t in threads:
t.start() #4 运行线程对象(列表里面的对象先后谁执行,不知道)
for t in threads:
t.join() 结果:
BOSS:今晚大家都要加班到22:00。
False
Worker:哎……命苦啊!
Worker:哎……命苦啊!
Worker:哎……命苦啊!
Worker:哎……命苦啊!
Worker:哎……命苦啊!
BOSS:<22:00>可以下班了。
False
Worker:OhYeah!
Worker:OhYeah!
Worker:OhYeah!
Worker:OhYeah!
Worker:OhYeah!