Even事件
时间:2019-12-13
本文章向大家介绍Even事件,主要包括Even事件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Even事件
1,定义
同进程的一样 ,线程的一个关键特性是每个线程都是独立运行且状态不可预测。如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在 初始情况下,Event对象中的信号标志被设置为假。如果有线程等待一个Event对象, 而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。一个线程如果将一个Event对象的信号标志设置为真,它将唤醒所有等待这个Event对象的线程。如果一个线程等待一个已经被设置为真的Event对象,那么它将忽略这个事件, 继续执行
import time from threading import Thread, current_thread, Event event = Event() def check(): print(f'{current_thread().name}监测服务器是否开启') time.sleep(1) print(event.is_set()) event.set() print(event.is_set()) print('服务器已经开启') def connect(): print(f'{current_thread().name} 等待连接') event.wait() #event.wait(1) # 只阻塞1秒,1秒之后如果还没有进行set 直接进行下一步操作. print(f'{current_thread().name}连接成功') if __name__ == '__main__': t1 = Thread(target=check,) t2 = Thread(target=connect,) t1.start() t2.start() ####################################### Thread-1监测服务器是否开启 Thread-2 等待连接 False True 服务器已经开启 Thread-2连接成功
实例 from threading import Thread from threading import current_thread from threading import Event import time event = Event() def check(): print(f'{current_thread().name} 监测服务器是否开启...') time.sleep(4) event.set() print('服务器已经开启...') def connect(): count = 1 while not event.is_set(): if count == 4: print('连接次数过多,已断开') break event.wait(1) print(f'{current_thread().name} 尝试连接{count}次') count += 1 else: print(f'{current_thread().name} 连接成功...') t1 = Thread(target=check,) t2 = Thread(target=connect,) t1.start() t2.start() ################################ Thread-1 监测服务器是否开启... Thread-2 尝试连接1次 Thread-2 尝试连接2次 Thread-2 尝试连接3次 连接次数过多,已断开 服务器已经开启... ################################ 服务器睡3秒以下 Thread-1 监测服务器是否开启... Thread-2 尝试连接1次 Thread-2 尝试连接2次 服务器已经开启... Thread-2 尝试连接3次 Thread-2 连接成功...
原文地址:https://www.cnblogs.com/daviddd/p/12034447.html
- Silvelright:ListBox无法用Tab顺序切换内部元素焦点的解决
- 2017精典书店年度好书
- silverlight:贝塞尔曲线
- 三要素支撑“人工智能+安防”:识别技术扛大旗
- IO模型
- jenkins 从git拉取代码
- Silverlight:针式打印机文字模糊的改善办法
- 大数据和云计算技术周报:NoSQL特辑
- 常用业务接口界面化 in python flask
- 打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机
- 区块链推动支付革命
- MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
- nohup命令
- 跨浏览器的剪贴板访问解决方案
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 让终端支持https,移植OpenSSL和libcurl到嵌入式linux,遇到的问题总结
- ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)
- R-plotly|甘特图(Gantt chart)- 一不小心年中了,立个flag
- XXE漏洞那些事儿(JAVA)
- Hexo 建站过程
- Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化)
- fastjson中的jndi注入
- R|生存分析-结果整理
- 实验吧-因缺思汀的绕过
- MySQL 用户与授权管理详解
- 基本知识|R语言简单饼图的绘制
- 分享一个有趣且牛逼的漏洞
- ggplot2-annotation|画图点“精”,让图自己“解释”
- 使用curl工具调试https接口
- 让android支持https访问银联后台,测试成功