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的主要内容,如果未能解决你的问题,请参考以下文章

pythonl练习笔记——爬虫的初级中级高级所匹配的知识

pythonl练习

pythonl练习1

多线程的练习代码 01

Thread 创建线程的小练习

狂神说Java笔记--多线程详解部分笔记