python 线程中事件对象


事件对象可以用于 线程间通信、等待事件(线程可以使用事件对象等待某个条件的发生。一个线程可以调用wait()方法在事件对象上阻塞,直到事件被另一个线程设置为通知状态。)

class threading.Event

is_set()

当且仅当内部标识为True时,返回True

set()

设置内部标识为True

clear()

设置内部标识为False

wait(timeout=None)

阻塞线程直到内部变量为 true 。如果调用时内部标识为 true,将立即返回。否则将阻塞线程,直到调用 set() 方法将标识设置为 true 或者发生可选的超时。

注意事项

1、该对象创建后,内部标识默认是False
2、wait如果设置超时时间,当等待时间超过超时时间时,返回False(基于3.9),而不会一直阻塞
3、如果在wait等待期间内部标识为变为True,则立马返回

import datetime
import threading
# 这里创建了一个单线程,在多线程中使用也是一样的
ev = threading.Event()  # 创建事件对象

def func():
    print("this is func, start", datetime.datetime.now())
    while not ev.is_set():  # 判断事件对象内部标识是否是True
        ev.wait(timeout=3)
        print("this is func, wait ev True", datetime.datetime.now())

T1 = threading.Thread(target=func)
T1.start()

time.sleep(4)
ev.set()
print("ev set True", datetime.datetime.now())

this is func, start 2024-12-16 22:39:57.137499
this is func, wait ev True 2024-12-16 22:40:00.147945
ev set True 2024-12-16 22:40:01.143061
#这里可以看到this is func打印与ev set True 同一时间打印,表示当内部标识为True时,wait直接返回
this is func, wait ev True 2024-12-16 22:40:01.143061

当时看到这个wait的作用,在想这不是与time.sleep()一模一样吗?其实这里就可以知道,在wait等待期间内部标识为变为True,则立马返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值