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