线程事件 Event


前言

一、介绍

  • 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

# 创建event事件
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()
        # 将线程句柄添加list列表中
        thread_list.append(t)

    # 所有线程准备完毕,将event内置Flag设置为True,恢复正在阻塞的线程
    eEvent.set()

    # 遍历列表,阻塞主线程
    for t in thread_list:
        # 阻塞主线程,等待所有子线程结束
        t.join()

    print("程序结束!")

四、总结

注意互斥锁 Lock 与事件 Event 区别,需求不同,使用方式也不同:

  • 互斥锁 Lock 主要针对多个线程同时操作同一个数据,使用互斥锁可以保证数据正常修改或者访问;
  • 事件 Event 主要用于唤醒正在阻塞等待状态的线程;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值