040同步条件event

金沙官网线上, 

条件同步和条件变量同步差不多意思,只是少了锁功能,因为条件同步设计于不访问共享资源的条件环境,event=threading.Event():条件环境对象,初始值为False.
event.isSet():  返回event的状态值
event.wait():  如果event.isSet()==False将阻塞线程
event.set():  设置event的状态值为True,所有阻塞池的线程激活进入就绪状态,等待操作系统调度
event.clear():  恢复event的状态值为False

金沙官网线上 1金沙官网线上 2

 1 import time,threading
 2 
 3 class Boss(threading.Thread):
 4     def run(self):
 5         print('Boss:今晚加班到22:00')
 6         event.isSet()or event.set()
 7         time.sleep(5)
 8         print('Boss:<22:00>可以下班了')
 9         event.isSet()orevent.set()
10 
11 class Worker(threading.Thread):
12     def run(self):
13         event.wait()
14         print('Worker:命苦啊~')
15         time.sleep(0.25)
16         event.clear()
17         event.wait()
18         print('Worker:oh,yeah')
19 
20 if __name__ == '__main__':
21     event = threading.Event()
22     threads = []
23     for i in range(5):
24         threads.append(Worker())
25     threads.append(Boss())
26     for t in threads:
27         t.start()
28     for t in threads:
29         t.join()

View Code

金沙官网线上 3金沙官网线上 4

 1 import threading,time
 2 import random
 3 def light():
 4     if not event.isSet():
 5         event.set() #wait就不阻塞 #绿灯状态
 6     count = 0
 7     while True:
 8         if count < 10:
 9             print('33[42;1m--green light on---33[0m')
10         elif count <13:
11             print('33[43;1m--yellow light on---33[0m')
12         elif count <20:
13             if event.isSet():
14                 event.clear()
15             print('33[41;1m--red light on---33[0m')
16         else:
17             count = 0
18             event.set() #打开绿灯
19         time.sleep(1)
20         count +=1
21 def car(n):
22     while 1:
23         time.sleep(random.randrange(10))
24         if  event.isSet(): #绿灯
25             print("car [%s] is running.." % n)
26         else:
27             print("car [%s] is waiting for the red light.." %n)
28 if __name__ == '__main__':
29     event = threading.Event()
30     Light = threading.Thread(target=light)
31     Light.start()
32     for i in range(3):
33         t = threading.Thread(target=car,args=(i,))
34         t.start()

View Code

 

来自:http://www.cnblogs.com/yuanchenqi/articles/5733873.html

本文由金沙官网线上发布于编程,转载请注明出处:040同步条件event

您可能还会对下面的文章感兴趣: