线程Event
版本一:
from threading import Event,current_thread,Thread
import time event=Event() #造一个对象,内部维护一个全局变量,状态为False def check():
print('%s 正在检测服务是否正常....' %current_thread().name)
time.sleep(3) #模拟检测过程
event.set() #把全局变量由False改为True def connect():
print('%s 等待连接...' %current_thread().name)
event.wait() #循环等待全局变量是否变了,直到event.set()执行了全局变量才会变
print('%s 开始连接...' % current_thread().name) #模拟链接请求
if __name__ == '__main__':
t1=Thread(target=connect)
t2=Thread(target=connect)
t3=Thread(target=connect) c1=Thread(target=check) t1.start()
t2.start()
t3.start()
c1.start()
打印结果
Thread-1 等待连接...
Thread-2 等待连接...
Thread-3 等待连接...
Thread-4 正在检测服务是否正常....
Thread-1 开始连接...Thread-2 开始连接...Thread-3 开始连接...
版本二:
对尝试链接次数进行约束限制,如果链接次数大于3,结束链接操作
from threading import Event,current_thread,Thread
import time event=Event() def check():
print('%s 正在检测服务是否正常....' %current_thread().name)
time.sleep(5)
event.set() def connect():
count=1
while not event.is_set(): #判断全局变量是否被设置过
if count == 4:
print('尝试的次数过多,请稍后重试')
return
print('%s 尝试第%s次连接...' %(current_thread().name,count))
event.wait(1)
count+=1
print('%s 开始连接...' % current_thread().name) if __name__ == '__main__':
t1=Thread(target=connect)
t2=Thread(target=connect)
t3=Thread(target=connect) c1=Thread(target=check) t1.start()
t2.start()
t3.start()
c1.start()
打印结果:
Thread-1 尝试第1次连接...
Thread-2 尝试第1次连接...
Thread-3 尝试第1次连接...
Thread-4 正在检测服务是否正常....
Thread-1 尝试第2次连接...
Thread-2 尝试第2次连接...
Thread-3 尝试第2次连接...
Thread-2 尝试第3次连接...
Thread-1 尝试第3次连接...
Thread-3 尝试第3次连接...
尝试的次数过多,请稍后重试尝试的次数过多,请稍后重试尝试的次数过多,请稍后重试
线程Event的更多相关文章
- (14)线程- Event事件和守护线程Daemon
<一>Event事件 线程Event基本和进程的Event语法是一样的 # wait() 动态给程序加阻塞 # set() 将内部属性改成True # clear() 将内部属性改成Fal ...
- python网络编程--线程event
一:线程event作用 Python提供了Event对象用于线程间通信,它是线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号结束. Event对象实现了简单的线程通信机制,它提供了设置信号 ...
- python 之 并发编程(线程Event、协程)
9.14 线程Event connect线程执行到event.wait()时开始等待,直到check线程执行event.set()后立即继续线程connect from threading impor ...
- 异步、+回调机制、线程queue、线程Event、协程、单线程实现遇到IO切换
# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor # import requests # import o ...
- python第五十一天----线程,Event,队列
进程与线程的区别: 线程==指令集,进程==资源集 (线程集) 1.同一个进程中的线程共享内存空间,进程与进程之间是独立的 2.同一个进程中的线程是可以直接通讯交流的,进程与间通讯必需通过一个中间的 ...
- python 线程 event
全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么执行event.wait 方法时便不再阻塞. cl ...
- 线程Event事件
事件(event) 事件是不同线程之间的同步对象 enent可以通过设置.等待.清除一个标识(flag),来进行线程间的控制 线程可以通过获取这个标志位(flag)的状态(设置或未设置)来控制线程 事 ...
- Python线程event
python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait.clear.set 事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 e ...
- Python之路(第四十五篇)线程Event事件、 条件Condition、定时器Timer、线程queue
一.事件Event Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果Flag值为 False,那么当程序执行 event.wait方法时就会阻塞,如果Flag值为True,那么 ...
- 线程event事件函数实现红绿灯
#!/usr/bin/env python # -*- coding: utf-8 -*- # author aliex-hrg import threading,time event = threa ...
随机推荐
- 纯css实现图片或者页面变灰色
前言 今天是个沉痛的日子,全国哀悼英雄,各大平台平日鲜丽的界面置纷纷换成了灰色,以表对逝者的安息与尊敬!!对付疫病,我没多大的本事,只能记录一点点知识来提升自己擅长的技术,待到将来能为国家尽一份绵薄之 ...
- 【tensorflow2.0】处理结构化数据-titanic生存预测
1.准备数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt import tensorflow as t ...
- MySQL默认隔离级别为什么是RR
曾多次听到“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题,当前以及解决,但是MySQL的各个版本沿用了原有习惯.历史版本中的问题是什么,本次就通过简单的测试来说明一下. 1. ...
- 【tensorflow2.0】处理图片数据-cifar2分类
1.准备数据 cifar2数据集为cifar10数据集的子集,只包括前两种类别airplane和automobile. 训练集有airplane和automobile图片各5000张,测试集有airp ...
- Java Web项目bug经验202002112049
运行程序后,如果配置有问题,可能不会进代码,而直接报错.
- Python第三方包之PrettyTable
Python第三方包之PrettyTable 可以让我们将数据用表格的方式展示出来 安装方式 pip install PrettyTable 测试是否安装成功 使用方法与对比 增加一条数据 先简单的看 ...
- CentOS下的Docker离线安装
Linux下离线安装Docker 一.基础环境 1.操作系统:CentOS 7.3 2.Docker版本:18.06.1 官方下载地址(打不开可能很慢) 3.百度云Docker 18.06.1地址:h ...
- 1044 Shopping in Mars (25分)(二分查找)
Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diam ...
- PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)
PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...
- Vulnhub DC-3靶机渗透
修改错误配置 打开了ova文件会发现,怎么也找不到DC-3的ip地址,估计是网卡出了问题. 那么就先配置下网卡. 进入上面这个页面之前按e. 将这里的ro 替换为 rw signie init=/bi ...