Python 线程事件 Event

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

      在 Python 项目开发中,线程 thread 使用是比较常见的,在前面的文章中我们介绍了 Python 线程的创建  以及 线程互斥锁 Lock ,今天还要额外介绍一个与线程相关的内容 – 事件 Event


一.Python 线程事件 Event 函数介绍

  •       set — 全局内置标志 Flag,将标志 Flag 设置为 True,通知在等待状态 ( wait ) 的线程恢复运行;
  •       isSet — 获取标志 Flag 当前状态,返回 True 或者 False ;
  •       wait — 一旦调用,线程将会处于阻塞状态,直到等待其他线程调用 set 函数恢复运行;
  •       clear — 将标志设置为False;

二.Python 线程事件 Event 原理

      事件 event 中有一个全局内置标志 Flag,值为 True 或者False。使用 wait 函数的线程会处于阻塞状态,此时 Flag 指为 False,直到有其他线程调用 set 函数让全局标志 Flag 置为 True ,其阻塞的线程立刻恢复运行,还可以用 isSet 函数检查当前的 Flag 状态.


三.Python 线程事件 Event 使用

      假如有这样一个场景:有 10 个单身狗,对面 100 米有 10 个美女,同时起跑,一人一个,自由选择,先到先得…..

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程事件 Event.py
@Time:2021/05/04 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
 
"""


# 导入线程模块
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("程序结束!")


'''
输出结果:

单身狗1都准备完毕,内置Flag状态:False.....
单身狗2都准备完毕,内置Flag状态:False.....
单身狗3都准备完毕,内置Flag状态:False.....
单身狗4都准备完毕,内置Flag状态:False.....
单身狗5都准备完毕,内置Flag状态:False.....
单身狗6都准备完毕,内置Flag状态:False.....
单身狗7都准备完毕,内置Flag状态:False.....
单身狗8都准备完毕,内置Flag状态:False.....
单身狗9都准备完毕,内置Flag状态:False.....
单身狗10都准备完毕,内置Flag状态:False.....
单身狗5告别单身,内置Flag状态:True.....
单身狗6告别单身,内置Flag状态:True.....
单身狗7告别单身,内置Flag状态:True.....
单身狗1告别单身,内置Flag状态:True.....
单身狗8告别单身,内置Flag状态:True.....
单身狗10告别单身,内置Flag状态:True.....
单身狗4告别单身,内置Flag状态:True.....
单身狗9告别单身,内置Flag状态:True.....
单身狗3告别单身,内置Flag状态:True.....
单身狗2告别单身,内置Flag状态:True.....
程序结束!
'''

四.重点总结

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

  •       互斥锁 Lock 主要针对多个线程同时操作同一个数据,使用互斥锁可以保证数据正常修改或者访问;
  •       事件 Event 主要用于唤醒正在阻塞等待状态的线程;

五.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 函数声明和调用
  5. Python 不定长参数 *argc/**kargcs
  6. Python 匿名函数 lambda
  7. Python return 逻辑判断表达式
  8. Python 字符串/列表/元组/字典之间的相互转换
  9. Python 局部变量和全局变量
  10. Python type 函数和 isinstance 函数区别
  11. Python is 和 == 区别
  12. Python 可变数据类型和不可变数据类型
  13. Python 浅拷贝和深拷贝
  14. Python 文件读写操作
  15. Python 异常处理
  16. Python 模块 import
  17. Python __name__ == ‘__main__’详细解释

未经允许不得转载:猿说编程 » Python 线程事件 Event
喜欢(2) 打赏

评论抢沙发

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏