如何使用多线程模拟红绿灯
直接上代码:
import threading
import time
event=threading.Event()
def car():
#判断是否是绿灯
while True:
if event.is_set():
#print("\033[42;1mMy car is running!\033[0m")
print("\033[42;1m→ \033[0m"*20)
time.sleep(1)
else:
#print("\033[41;1mMy car is waiting!\033[0m")
print("\033[41;1mX \033[0m"*20)
event.wait()
print("waiting for light is green !Now start!")
#设置红绿灯
def light():
#设置绿灯
count=0
event.set()#标志位设定为绿灯
while True:
if count>5 and count<11:
event.clear()#标志位清空代表红灯
print("\033[41;1m⚪\033[0m"*20)
elif count>11:
#改变标志位,绿灯
event.set()
count=0
else:
print("\033[42;1m⚪\033[0m"*20)
time.sleep(1)
count+=1
if __name__=="__main__":
#生成汽车线程
light = threading.Thread(target=light, args=())
#lis=[]
#for i in range(10):
car=threading.Thread(target=car,args=())
car.start()
#car1=threading.Thread(target=car,args=())
#car2=threading.Thread(target=car,args=())
#car1.start()
#
#car2.start()
light.start()
来看下运行效果:
先来解释一下代码;
我们使用threading模块生成两个线程:
①模拟红绿灯
②模拟汽车
当汽车看到红灯时,则停车等待直到绿灯;在绿灯时,则继续前进。
我们使用threading.event()生成一个event事件,也可以称它标志位,和python中的True和False是一样的。
我们用event.is_set()来确定是由处于被指标位置,当其为真时,则表示目前为绿灯状态;当绿灯时间已经完成时,则使用event.clear()来清除标志状态,其代表目前状态转化为红灯。当红灯 时间完成时,我们则在循环中将event,set()来确定绿灯状态。以此循环,则可以模拟一个红绿灯和汽车的行驶状态。
如果对我的文章感兴趣,请为我点一个赞,如果有python的知识需要了解或探讨,可以加本人微信:cuiliang1666457052