Skip to content

Latest commit

 

History

History
47 lines (30 loc) · 1.6 KB

File metadata and controls

47 lines (30 loc) · 1.6 KB

事件对象Event

python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set。

Event原理

事件event中有一个全局内置标志Flag,值为 True 或者False。使用wait()函数的线程会处于阻塞状态,此时Flag指为False,直到有其他线程调用set()函数让全局标志Flag置为True,其阻塞的线程立刻恢复运行,还可以用isSet()函数检查当前的Flag状态。

相关函数介绍

set() — 全局内置标志Flag,将标志Flag 设置为 True,通知在等待状态(wait)的线程恢复运行;

isSet() — 获取标志Flag当前状态,返回True 或者 False;

wait() — 一旦调用,线程将会处于阻塞状态,直到等待其他线程调用set()函数恢复运行;

clear() — 将标志设置为False;

用 threading.Event 实现线程间通信

使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,Event默认内置了一个标志,初始值为False。

一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时, 该Event会通知所有等待状态的线程恢复运行。

  • 触发一次执行一次
import threading


def run(e):
    for i in range(5):
        e.wait()
        print('---------------', i)
        e.clear()

if __name__ == '__main__':
    e = threading.Event()
    t = threading.Thread(target=run, args=(e, ))
    t.start()
    for i in range(5):
        v = input()
        if v == 'y':
            e.set()