#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:QiFeng Zhang
'''线程事件测试,设计到事件的有三个函数:
1.创建事件:threading.Event()
2.调用事件,设置标志set()
3.清除标志:clear()
4.判断事件状态:is_set()'''
__Author__ = 'Faker'
import threading
import time
v_event = threading.Event() #创建事件对象
def light(): #定义红绿灯函数,设置红绿灯状态
v_count = 0 #设置计数变量,根据技术修改灯的状态
while True: #循环计数,修改灯的状态
time.sleep(1) #避免循环太快,设置间隔1s循环一次
if v_count < 5: #如果计数小于5,设置为绿灯,v_count=0时,设置一次,不用每次循环都设置一次标志,并且计数+1
# print("\033[42;1m green light runing.... \033[0m")
if v_count == 0:
v_event.set()
v_count += 1
elif v_count >= 5 and v_count < 10: #计数在5至10之间,清除标志位,计数=5时清除一次,不用每次都清除,并且计数+1
# print("\033[41;1m red light stoping.... \033[0m")
if v_count == 5:
v_event.clear()
v_count += 1
else: #如果计数大于等于10,就修改计数=0
v_count = 0
v_light = threading.Thread(target=light) #创建线程控制事件状态
v_light.start()
def car(name): #创建车运行函数
while True: #循环控制等的当前状态,控制车的运行及停止
time.sleep(1)
if v_event.is_set(): #判断事件的状态是否被设定,被设定车运行
print("\033[43;1m [%s] is running....\033[0m"%name)
else: #事件状态未被设定,车停止
print("\033[44;1m [%s] is stopping....\033[0m" % name)
v_car = threading.Thread(target=car,args=("Tesla",)) #创建车的线程,并启动车
v_car.start()
print(threading.active_count(),threading.current_thread()) #打印当前线程数,及当前线程