Python 线程事件 Event - Python零基础入门教程

2021年6月25日 27点热度 0条评论 来源: 猿说编程

目录

零基础 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

本文由博客 - 猿说编程 猿说编程 发布!

    原文作者:猿说编程
    原文地址: https://www.cnblogs.com/shuopython/p/14925669.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。