python网络编程--线程event
一:线程event作用
Python提供了Event对象用于线程间通信,它是线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号结束。
Event对象实现了简单的线程通信机制,它提供了设置信号,清楚信号,等待等用于实现线程间的通信。
官方解释
event是一个简单的同步对象;event表示内部标志和线程。可以等待标志设置,或设置或清除标志本身。
二:event使用
1)event = threading.Event() 申明event实例
2)event.wait() 线程设置等待标志
3)event.set() 如果设置了标志,则等待方法不执行任何操作
4)event.clear() 如果标志已清除,等待将阻塞,直到它再次设置。
任意数量的线程都可能等待相同的事件。
三:示例代码
通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥灯,生成几个线程做车辆,车辆行驶按红灯停,绿灯行的规则。
# -*- coding:utf-8 -*- __author__ = 'shisanjun' import threading import time event=threading.Event()#申明event对象 def lighter():#红绿灯 event.set()#设置标志,代表绿灯行 count=0 while True: #1-5绿灯,6-10红灯 if count>5 and count<=10: event.clear() print("\033[31;1mred light ............\033[0m") #清除标志,代表红灯停 elif count>10: event.set() print("\033[32;1mgreen light..........\033[0m") #设置标志,代表绿灯行 count=0 else: print("\033[32;1mgreen light..........\033[0m") time.sleep(1) count+=1 def car():#汽车 while True: if event.is_set():#判读标志是否设置 print("\033[33;1mcar runing .......\033[0m") time.sleep(1) else: event.wait() #等待标志设置 l=threading.Thread(target=lighter,) c=threading.Thread(target=car,) l.start() c.start()