Event事件

用来同步线程之间的状态。

举个例子:

​ 你把一个任务丢到了子线程中,这个任务将异步执行。如何获取到这个任务的执行状态

解决方法:

  1. 如果是拿到执行结果 我们可以采用异步回调,
  2. 在这里我们采用另外一种方法来做:Event
Event事件

第一阶段:采用轮询方式去获取线程状态

"""a线程的任务是:开启服务器,需要3秒钟;b线程的任务是:连接服务器,直到连接成功为止"""
from threading import Thread
import time is_boot = False # 开启服务器
def start_server():
global is_boot
print("starting server......")
time.sleep(3)
print("server started!")
is_boot = True # 连接服务器
def connect_server():
while True:
if is_boot:
print("连接服务器成功")
break
else:
print("失败,服务器未启动!")
time.sleep(0.5) t1 = Thread(target=start_server)
t2 = Thread(target=connect_server) t1.start()
t2.start()
starting server......
失败,服务器未启动!
失败,服务器未启动!
失败,服务器未启动!
失败,服务器未启动!
失败,服务器未启动!
失败,服务器未启动!
server started!
连接服务器成功

由此可以看出“连接服务器”函数,非常消耗资源。在多线程中,如果我们要实现等服务器开启完的那一刻,我们再连接上去,这样就能一次性完成连接,这时我们就使用Event事件来完成

第二阶段:采用Event事件

from threading import  Thread,Event
import time # 创建事件
e = Event()
print(e._flag)
# 开启服务器
def start_server():
print("starting server......")
time.sleep(3)
print("server started!")
e.set() # 状态从False 变为 True
print(e._flag) # 连接服务器
def connect_server():
e.wait() # 等待事件从 false 变为true,当状态发生变化即可执行下面代码
if e.is_set():
print("连接成功") t1 = Thread(target=start_server)
t2 = Thread(target=connect_server)
t1.start()
t2.start()
False
starting server......
server started!
True
连接成功

最新文章

  1. 数迹学——Asp.Net MVC4入门指南(2):添加一个控制器
  2. (实用篇)PHP JSON数组与对象的理解
  3. HDU 4059 The Boss on Mars 容斥原理
  4. android反编译经验谈
  5. Robot Framework自动化测试---元素定位
  6. SQLAlchemy on the way
  7. MySQL 性能优化的最佳20多条经验分享(二)(转)
  8. C语言的第一次博客作业
  9. Swift基础之OC文件调用Swift代码(在上次的基础上写的)
  10. 类 Calendar
  11. 【bzoj 2002】弹飞绵羊
  12. 项目部署相关命令(pm2)
  13. 震惊!最全PyCharm教程
  14. python简说(四)字符串
  15. ssh服务的最佳实践
  16. CodeSmith无法获取Oracle表注释
  17. 42. linux下数据库服务启动
  18. hdu-1163(九余数定理)
  19. angular.foEach
  20. int()

热门文章

  1. 后台用map接收数据,报类型转换错误
  2. Android学习10
  3. html - html5 audio 音乐自动播放,循环播放等
  4. php 移动操作数组函数
  5. yii2时区语言设置
  6. Linux kali添加root用户密码
  7. jmeter实现SMTP邮件协议压测
  8. 我的18vps~
  9. MyCat of Middleware
  10. Clausen Functions (and related series, functions, integrals)