python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set
事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞。
- clear:将“Flag”设置为False
- set:将“Flag”设置为True
用 threading.Event 实现线程间通信
使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,Event默认内置了一个标志,初始值为False。一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时,该Event会通知所有等待状态的线程恢复运行。import threading import time class MyThread(threading.Thread): def __init__(self, signal): threading.Thread.__init__(self) # 初始化 self.singal = signal def run(self): print "I am %s,I will sleep ..."%self.name # 进入等待状态 self.singal.wait() print "I am %s, I awake..." %self.name if __name__ == "__main__": # 初始 为 False singal = threading.Event() for t in range(0, 3): thread = MyThread(singal) thread.start() print "main thread sleep 3 seconds... " time.sleep(3) # 唤醒含有signal, 处于等待状态的线程 singal.set()
import threading def do(event): print 'start' event.wait() print 'execute' event_obj = threading.Event()for i in range(10): t = threading.Thread(target=do, args=(event_obj,)) t.start() event_obj.clear() #继续阻塞inp = raw_input('input:')if inp == 'true': event_obj.set() #唤醒