#_*_coding:utf-8_*_ __author__ = 'gaogd' ''' 线程之间的相互通讯 红灯的时候处于等待,也就是标志位没有被设置,绿灯或者黄灯的时候不用等待,也就是标志位处于设置状态 ''' import threading,time import random def light(): ##灯不会应为car而做出任何改变,而是车更加灯做出改变。红灯听 if not event.isSet(): event.set() #wait就不阻塞 #绿灯状态 count = 0 while True: if count < 10: ##10 以下时绿灯 print '\033[42;1m--green light on---\033[0m' elif count <13: ## 10 - 12 秒时黄灯 print '\033[43;1m--yellow light on---\033[0m' elif count <20: ## 13--19 秒的时候时红灯 if event.isSet(): ## 判断event.isSet() 如果为真,也就是如果为绿灯,就event.clear(),让它变成红灯 event.clear() #clear the green light , switch on the red light print '\033[41;1m--red light on---\033[0m' else: count = 0 event.set() #打开绿灯 time.sleep(1) count +=1 def car(n): while 1: time.sleep(random.randrange(3)) if event.isSet(): #绿灯 print "car [%s] is running.." % n else:# red light print "car [%s] is waiting for the red light.." %n event.wait() print "Green light is on , car %s is running.............." %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() ''' Events # An event is a simple synchronization object; the event represents an internal flag, and threads can wait for the flag to be set, or set or clear the flag themselves. event = threading.Event() # a client thread can wait for the flag to be set event.wait() ##等待标志位被设置,如果标志位没有被设置,就阻塞,一直等到标志位被设置才能继续走下去 # a server thread can set or reset it event.set() ## 设置标志位 event.clear() ##清除标志位 If the flag is set, the wait method doesn’t do anything. If the flag is cleared, wait will block until it becomes set again. Any number of threads may wait for the same event. '''
Python 线程之间的相互通信(交通信号灯实例)
精选 转载lvnian2009 博主文章分类:Python小用法
文章标签 Python 线程之间的相互通信(交通信 文章分类 Python 后端开发
下一篇:Python 多进程
-
多站点之间IPsecVvv互通实验
公网之间专线配置,实现互联互通
设备名 IP 内网 -
优化交通信号灯设置python 交通信号灯程序编程
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:Ø 异步随机生成按照各个路线行驶的车辆。例如: 由南向而来去往北向的车辆 ---- 直行车辆---- 右转车辆---- 左转车辆 &nb
优化交通信号灯设置python 黑马程序员 Java java ide