python模块学习(threading模块中的Event类)
来源:互联网 发布:襄阳网络广播电视台 编辑:程序博客网 时间:2024/05/18 12:35
学习版本3.5.2
Event类是用于通过事件来控制线程的执行情况。它内部存了个flag来控制线程的阻塞与否。
clear(self) 把flag设置为false
set(self) 把flag设置为true,并唤醒所有被阻塞的线程
is_set(self) 返回flag的状态
wait(self, timeout=None) 当flag为false的时候阻塞当前线程
举个例子:一个工厂有两个员工生产产品,放满了之后就会去通知消耗部门去消耗并且自己去休息并且通知消耗部门;消耗部门有一个员工在消耗完东西之后通知生产员工并且自己去休息等待生产员工来通知。代码如下:
#/usr/bin/python3# -*- utf-8 -*-#学习版本3.5.2import threadingimport timeeven1 = threading.Event()even2 = threading.Event()products = 0class Product(threading.Thread): def run(self): global products while True: print(self.getName(),": 准备生产") if products >= 8: print(self.getName(),": 放不下了,我先休息一下") even1.clear() even2.set() even1.wait() else: print(self.getName(),": 生产中") time.sleep(1) products += 1 print(self.getName(),": 完成了一个") print(self.getName(),": 一共有:",products,"个")class Consumer(threading.Thread): def run(self): global products while True: if products > 0: print(self.getName(),": 消耗产品") products -= 1 else: print(self.getName(),": 没了") print(self.getName(),": 等一会,打电话通知下") even1.set() even2.clear() even2.wait()if __name__ == "__main__": p1 = Product(name="A") p2 = Product(name="B") c1 = Consumer(name="C") p1.start() p2.start() c1.start() print("main")
运行结果
A : 准备生产A : 生产中B : 准备生产B : 生产中C : 没了C : 等一会,打电话通知下mainB : 完成了一个B : 一共有: 1 个B : 准备生产B : 生产中A : 完成了一个A : 一共有: 2 个A : 准备生产A : 生产中B : 完成了一个B : 一共有: 3 个B : 准备生产B : 生产中A : 完成了一个A : 一共有: 4 个A : 准备生产A : 生产中A : 完成了一个B : 完成了一个A : 一共有: 6 个B : 一共有: 6 个B : 准备生产A : 准备生产A : 生产中B : 生产中A : 完成了一个A : 一共有: 7 个A : 准备生产A : 生产中B : 完成了一个B : 一共有: 8 个B : 准备生产B : 放不下了,我先休息一下C : 消耗产品C : 消耗产品C : 消耗产品C : 消耗产品C : 消耗产品C : 消耗产品C : 消耗产品C : 消耗产品C : 没了C : 等一会,打电话通知下B : 准备生产B : 生产中A : 完成了一个...
阅读全文
0 0
- python模块学习(threading模块中的Event类)
- python模块学习(threading模块中的Thread类)
- python模块学习(threading模块中的Timer类)
- python模块学习(threading模块中的Condition类)
- python模块学习(threading模块中的Barrier类)
- python中的threading模块
- python模块学习(threading模块中的Lock类和RLock类)
- python模块学习(threading模块中的Semaphore类和BoundedSemaphore类)
- 【Python】threading.Event模块控制多线程
- python多线程模块threading学习
- python模块学习(threading模块的方法)
- Python 多线程(threading模块)
- Python 多线程(threading模块)
- Python多线程(threading模块)
- python中的线程使用--threading模块
- Python学习笔记--BeautifulSoup、urllib、threading模块
- python多线程模块threading学习总结
- Python threading模块
- js改变div的class属性
- 三代数据仓库的演进历程以及新一代数仓与区块链的关系
- Java_代码优化
- NOIP2017升天记
- 什么时候用GET,什么时候用POST?
- python模块学习(threading模块中的Event类)
- 《用python进行数据分析》语法要点总结(2)
- Android ExifInterface 图片信息 读取时中文乱码解决方案
- 编辑器指定位大小写变换
- 自动刷新界面方法,兼容问题
- springMVC+微信小程序之灵异事件,犯错提醒
- nodejs 访问mysql数据库超时的bug解决
- 将文本数据转到数据库中
- 关于servlet中doPost()或doGet()方法不执行的问题?