#1、Event里面有一个标志flag,当e = Event()刚创建的时候,flag=False,阻塞,这个时候,e.is_set()也是等于False,阻塞。
#e.set()让flag变成非阻塞,e.clear()让flag变成阻塞。
#e.wait() 当flag=True,非阻塞;当flag=False,阻塞。 #2、例子:模拟连接mysql数据库,设置连接三次,每0.5秒连接一次,如果连接成功,打印出成功,否则就报错。 from threading import Thread
from threading import Event
import time
import random
def conn(e):
count = 1
while not e.is_set(): #e.is_set()刚创建的时候是False,所以这里是while True的意思。
if count > 3:
raise TimeoutError #连接大于3次,抛出超时错误。
print('连接第%s次'%count)
count += 1
e.wait(0.5) #每次连接都是等待0.5秒。那么2次连接就是1秒,因为下面的e.set()是1秒之后执行,那么
print('连接成功')#当下面检测1秒并且conn比check先执行的情况下,可以连接三次才打印成功;如果
# 同时执行,只连接两次就打印成功。当下面检测2秒,就会抛出错误。 def check(e):
time.sleep(random.randint(1,2)) #模拟检测数据库连接是否正常(省略了n行代码),检测使用了1或2秒
e.set() #1秒以后,变成非阻塞。 e = Event()
t = Thread(target=conn,args=(e,))
t.start()
t1 = Thread(target=check,args=(e,))
t1.start()
#有三种结果:
# 连接第1次
# 连接第2次
# 连接成功 # 连接第1次
# 连接第2次
# 连接第3次
# TimeoutError # 连接第1次
# 连接第2次
# 连接第3次
# 连接成功

最新文章

  1. Linux初识
  2. ExtJs 实现表单联动
  3. 【资源】HTML5工具篇:10个营销人也能轻松使用的在线编辑平台
  4. POJ 3281 网络流dinic算法
  5. .htaccess 重写去index.php
  6. Unity不同平台生成中预处理的注意点
  7. 洛谷P1993 小 K 的农场
  8. xml bug之cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration...
  9. 网站如何做到完全不需要jQuery
  10. ExtJS4.2学习(19)在线编辑器Ext.form.HtmlEditor(转)
  11. 进入MFC讲坛的前言(五)
  12. 国内三大PTPrivate Tracker站分析
  13. Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用]
  14. Tomcat安装和目录简介
  15. 华为P20无线投屏到电脑 绝地求生投射电脑
  16. md5加密通过URL传给后台
  17. Tensorflow object detection API 搭建物体识别模型(一)
  18. Exercise about Shape
  19. Emoji表情符号在MySQL数据库中的存储
  20. linux内核配置 kbuild

热门文章

  1. Cookie简单介绍
  2. 二十四、CI框架之URL辅助函数
  3. 在div中注入html代码
  4. POJ-3262 贪心的一个小技巧
  5. pyCharm中设置查看运行过程中的变量实时情况
  6. Android自定义View——多边形网格属性图
  7. Vuex 是什么
  8. 题目(或游戏)流程控制器上传到GitHub
  9. vector删除指定元素
  10. logrus日志框架