python线程事件Event(30)
在python项目开发中,线程thread使用是比较常见的,在前面的文章中我们介绍了 python线程的创建 以及 线程互斥锁 ,今天还要额外介绍一个与线程相关的内容 – 事件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(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com @File:python_event.py
@Time:2019/10/20 21:25 @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主要用于唤醒正在阻塞等待状态的线程;
猜你喜欢:
转载请注明:猿说Python » python 事件Event

python线程事件Event(30)的更多相关文章
- python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数
####################总结######################## 管道:是进程间通信的第二种方式,但是不推荐使用,因为管道会导致数据不安全的情况出现 事件:当我运行主进程的 ...
- python 线程事件
与进程的事件相似 # 事件,模拟连接数据库 import time from threading import Event, Thread def wait(e): while 1: e.wait(1 ...
- python线程条件变量Condition(31)
对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition. 一.线程条件变 ...
- python线程池ThreadPoolExecutor(上)(38)
在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...
- python线程定时器Timer(32)
相对前面几篇python线程内容而言,本片内容相对比较简单,定时器 – 顾名思义,必然用于定时任务. 一.线程定时器Timer原理 原理比较简单,指定时间间隔后启动线程!适用场景:完成定时任务,例如: ...
- python线程信号量semaphore(33)
通过前面对 线程互斥锁lock / 线程事件event / 线程条件变量condition / 线程定时器timer 的讲解,相信你对线程threading模块已经有了一定的了解,同时执行多个线程的 ...
- python线程队列Queue-FIFO(35)
之前的文章中讲解很多关于线程间通信的知识,比如:线程互斥锁lock,线程事件event,线程条件变量condition 等等,这些都是在开发中经常使用的内容,而今天继续给大家讲解一个更重要的知识点 — ...
- python线程障碍对象Barrier(34)
python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = ...
- python 线程队列PriorityQueue(优先队列)(37)
在 线程队列Queue / 线程队列LifoQueue 文章中分别介绍了先进先出队列Queue和先进后出队列LifoQueue,而今天给大家介绍的是最后一种:优先队列PriorityQueue,对队列 ...
随机推荐
- Qt进程间通信
Qt 提供了四种进程间通信的方式: 使用共享内存(shared memory)交互:这是 Qt 提供的一种各个平台均有支持的进程间交互的方式. TCP/IP:其基本思想就是将同一机器上面的两个进程一个 ...
- Jupyter开发环境搭建
小书匠kindle 目录: 1.Jupyter 介绍 2.Jupyter安装 3.notedown插件安装 4.扩展包安装 5.运行Jupyter 6.在远端服务器上运行jupyter 1.Jupyt ...
- Centos 如何扩充/增加磁盘
1:使用背景 废话不多说,磁盘空间不足,增加磁盘,然后扩充现有不足空间磁盘. 本次以Vmware进行测验. 2:我们本次要增加的就是这个 3:我们先添加一个磁盘,20G,添加过程不在赘述 4:添加完成 ...
- 在 Ubuntu 18.04 /centos7上安装 Python 3.7
扩展源安装 sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsn ...
- base/7/x86_64/filelists_db FAILED
解决办法: [root@localhost ~]# cd /var/lib/rpm [root@localhost rpm]# rm -rf __db.* # 清除原 rpmdb 文件 [root ...
- yum安装错误记录
原因:使用yum安装libvirt以后,后续没有使用yum -remove 包名去移除这个包,接着使用源码安装了libvirt服务,当我卸载源码安装的libvirt以后,通过yum重新安装libvir ...
- 一篇文章彻底搞懂base64编码原理
开始 在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现. base64是什么东东呢? Base64 ...
- Windows下的apache maven安装与配置
去到官网http://maven.apache.org/download.cgi下载压缩包我选择的是二进制zip压缩文件. 解压并配置压缩文件的目录到MAVEN_HOME环境变量,添加解压文件下的bi ...
- 感知机模型到DNN模型
参考资料 感知机模型:https://www.cnblogs.com/pinard/p/6042320.html DNN:https://www.cnblogs.com/pinard/p/641866 ...
- asp.net怎样实现批量下载文件(非打包形式下载)
问题: 我想实现的是一个一个的下载. 比如我有一个文件列表.通过checkbox选择.通过单击下载按钮下载选中文件. 百度到都是用打包形式实现批量下载. 这是我自己写的代码,但是点击下载后只能下载一个 ...