【python】threading模块之event

正文

threading模块之event

python的 Event 对象用于线程间通信,即程序中的某一个线程需要通过判断另一个线程的状态来确定自己下一步的操作,这时就需要使用 event 对象。Event 对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在初始情况下,Event 对象中的信号标志被设置为 False。如果有线程等待一个 Event 对象, 而这个 Event 对象的标志为假,那么这个线程将会被一直阻塞直至该标志为真。

一个线程如果将一个 Event 对象的信号标志设置为真,它将唤醒所有等待这个 Event 对象的线程。如果一个线程等待一个已经被设置为真的 Event 对象,那么它将忽略这个事件, 继续执行。

函数 说明
event.isSet() 返回 event 的状态值
event.wait() 如果 event.isSet() == False 将阻塞线程
event.set() 设置 event 的状态值为 True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度
event.clear() 恢复 event 的状态值为 False

 

 

 

import threading
import time

event = threading.Event()

def light():
    print('红灯正亮着')
    time.sleep(3)
    event.set() # 模拟绿灯亮

def car(name):
    print('车%s正在等绿灯' % name)
    event.wait() # 模拟等绿灯的操作,此时event为False,直到event.set()将其值设置为True,才会继续运行
    print('车%s通行' % name)

if __name__ == '__main__':
    # 红绿灯
    t1 = threading.Thread(target=light)
    t1.start()
    # 车
    for i in range(3):
        t = threading.Thread(target=car, args=(i,))
        t.start()

 

参考资料

1. Python Event对象

posted @   苏格拉底的落泪  阅读(745)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
历史上的今天:
2018-06-06 【shell编程】bash =~ 用法
点击右上角即可分享
微信分享提示