pythonl练习笔记——threading线程中的事件Event
Posted gengyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonl练习笔记——threading线程中的事件Event相关的知识,希望对你有一定的参考价值。
1 事件Event
使用方法:e = threading.Event()
Event对象主要用于线程间通信,确切地说是用于主线程控制其他线程的执行。
Event事件提供了三个方法:wait等待、clear清除信号False、set设置信号True。
Event事件实现通信机制:全局定义了一个“Flag”(默认为False),若Flag信号被clear为False,则执行event.wait方法时会阻塞;若Flag信号被set为True,则执行event.wait方法时便不阻塞。
Event事件对象提供了is_set()方法判断内部信号Flag标志状态。
2 示例
import threading import random from time import sleep a = 500 e = threading.Event() def fun(): while True: sleep(2) e.wait() global a print(‘a=‘,a) a -= random.randint(0,100) t=threading.Thread(target=fun) t.start() while True: sleep(1) a += random.randint(0,10) if a>100: e.set() else: e.clear() t.join()
运行
a= 503 a= 463 a= 457 a= 426
...
说明:
(1)Event的默认标志为False,意味阻塞;
(2)Event置于线程对象中,可实现线程间通信,意味着一个线程的运行与否,与另外一个线程的通知信息有关。
(3)当一个线程因事件方法wait()而进入等待状态时,另外一个线程Flag为False时,则该线程会一直处于阻塞状态;直到另外一个进程通过set()方法将Flag标志设置为True时,Event事件会通知该线程恢复运行。
关于线程Event事件的深层次理解,可参考:Python学习总结笔记(5)--进程/线程Event机制使用时要注意的一个问题
以上是关于pythonl练习笔记——threading线程中的事件Event的主要内容,如果未能解决你的问题,请参考以下文章