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