event事件

事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞。

event.isSet():  返回event的状态值;

event.wait():  如果 event.isSet()==False将阻塞线程;

event.set():   设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;

event.clear():  恢复event的状态值为False。

  • clear:将“Flag”设置为False
  • set:将“Flag”设置为True

 

示例:红绿灯

import threading, time
import random

def light():
    if not event.isSet():           ##如果没有设置标志位,
        event.set()                     #设置标志位#绿灯状态
    count = 0

    while True:
        if count < 10:
            print('\033[42;1m--green light on---\033[0m')
        elif count <13:
            print('\033[43;1m--yellow light on---\033[0m')
        elif count <20:
            if event.isSet():           ##判断是否有标志位
                event.clear()           ##清除标志位,变红灯

            print('\033[41;1m--red light on---\033[0m')

        else:                ##count>20
            count = 0        
            event.set()             #打开绿灯
        time.sleep(1)
        count +=1


##汽车先判断是不是绿灯(判断是不是event.isSet,,如果是,则提示绿灯,如果不是,则提示是红灯,等待通行)
def car(n):
    while 1:
        time.sleep(random.randrange(10))
        if  event.isSet():          #绿灯
            print("car [%s] is running.." % n)
        else:
            print("car [%s] is waiting for the red light.." %n)

if __name__ == '__main__':
    event = threading.Event()
    Light = threading.Thread(target=light)
    Light.start()
    for i in range(3):
        t = threading.Thread(target=car,args=(i,))
        t.start()

 

示例加班:

import threading,time
class Boss(threading.Thread):
    def run(self):
        print("BOSS:今晚大家都要加班到22:00。")
        event.isSet() or event.set()
        time.sleep(5)
        print("BOSS:<22:00>可以下班了。")
        event.isSet() or event.set()
class Worker(threading.Thread):
    def run(self):
        event.wait()
        print("Worker:哎……命苦啊!")
        time.sleep(0.25)
        event.clear()
        event.wait()
        print("Worker:OhYeah!")
if __name__=="__main__":
    event=threading.Event()
    threads=[]
    for i in range(5):
        threads.append(Worker())
    threads.append(Boss())
    for t in threads:
        t.start()
    for t in threads:
        t.join()

 

Timer定时器

from threading import Timer

def hello():
    print("hello, world")

t = Timer(5, hello)            ##hello为函数名。5为多长时间后执行

t.start()  

 

posted @ 2018-05-21 21:20  FRESHMANS  阅读(219)  评论(0)    收藏  举报