python threading.Event()用法

文章介绍了在Python中使用`threading.Event`实现红绿灯模拟的两种方法,展示了如何通过事件同步控制多线程的执行。第一种使用`threading.Event()`,第二种则利用全局变量简化代码结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

红绿灯例子

Event的用法

import threading,time

event=threading.Event()

def lighter():
    timesec=0
    event.set()
    while True:
        if 5<timesec<=10:
            event.clear()
            print("红灯亮")
        elif timesec>10:
            event.set()
            timesec=0
        else:
            print("绿灯亮")
        time.sleep(1)
        timesec+=1

def car(name):
    while True:
        if event.is_set():
            print(f"{name}正在行驶...")
            time.sleep(1)
        else:
            print(f"{name}看红灯亮")
            event.wait()
            print(f"--{name}绿灯亮")

light=threading.Thread(target=lighter,)
light.start()
car=threading.Thread(target=car,args=('mini',))
car.start()

等同方案:

import threading,time

event=False  #Event

def lighter():
    timesec=0
    global event
    event=True
    while True:
        if 5<timesec<=10:
            event=False #event.clear()
            print("-红灯亮")
        else:  #可以用elif那部分 ,这放在了下面if中
            if timesec>10:
                event=True #相当于event.set()
                timesec=0
            print("-绿灯亮")
        time.sleep(1)
        timesec+=1

def car(name):
    global event
    while True:
        if event: #相当于event.is_set()
            print(f"{name}正在行驶...")
        else:
            print(f"{name}看红灯亮")
            while not event: #替换event.wait()
                if event:
                    break
                time.sleep(0.5)
            print(f"{name}看绿灯亮")
        time.sleep(1)

light=threading.Thread(target=lighter,)
light.start()
car=threading.Thread(target=car,args=('mini',))
car.start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值