前言
一、介绍
- set — 全局内置标志 Flag,将标志 Flag 设置为 True,通知在等待状态 ( wait ) 的线程恢复运行;
- isSet — 获取标志 Flag 当前状态,返回 True 或者 False ;
- wait — 一旦调用,线程将会处于阻塞状态,直到等待其他线程调用 set 函数恢复运行;
- clear — 将标志设置为False;
二、原理
事件 event 中有一个全局内置标志 Flag,值为 True 或者False。使用 wait 函数的线程会处于阻塞状态,此时 Flag 指为 False,直到有其他线程调用 set 函数让全局标志 Flag 置为 True ,其阻塞的线程立刻恢复运行,还可以用 isSet 函数检查当前的 Flag 状态.
三、应用
import threading
eEvent = threading.Event()
def get_girl_friend(id):
print(员工{}都准备完毕,内置Flag状态:{}.....".format(id,eEvent.isSet()))
eEvent.wait()
print("员工%d抢到奖品....."%id)
if __name__ == "__main__":
thread_list = list()
for i in range(1,11):
t = threading.Thread(target=get_girl_friend,args=(i,))
t.start()
thread_list.append(t)
eEvent.set()
for t in thread_list:
t.join()
print("程序结束!")
四、总结
注意互斥锁 Lock 与事件 Event 区别,需求不同,使用方式也不同:
- 互斥锁 Lock 主要针对多个线程同时操作同一个数据,使用互斥锁可以保证数据正常修改或者访问;
- 事件 Event 主要用于唤醒正在阻塞等待状态的线程;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)