'''同步条件Event''' import threading import time class Boss(threading.Thread): def run(self): print('Boss:今晚大家加班到23:00!') print(event.isSet()) # False event.set() # ②设置event状态值为True,所有阻塞线程被激活等待操作系统调度 time.sleep(3) print('Boss:22:30大家可以提前下班了!') event.set() # ⑤再次将event值设为True # print(event.isSet()) class Worker(threading.Thread): def run(self): event.wait() # ①一开始本应先运行这5个线程,但event.isSet()为False,所以将被阻塞 print('Worker:哎,又加班,烦死了!') time.sleep(1) event.clear() # ③event.clear()将event的状态值恢复为False event.wait() # ④又被阻塞 print('Worker:卧槽,终于下班了,大家冲啊!') if __name__ == '__main__': event = threading.Event() # 生成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() print('ending...') ''' event.isSet():返回event的状态值 event.wait():如果event.isSet()==False将阻塞线程 event.set():设置event的状态值为True,所有阻塞池的线程激活进入就绪状态,等待操作系统调度 event.clear():恢复event的状态值为False ''' # 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.并且线程可以等待标志被设置,或者自己设置或清除标志 # If the flag is set, the wait method doesn’t do anything.如果设置了标志,wait方法不会做任何事情 # If the flag is cleared, wait will block until it becomes set again.如果标志被清除,wait将阻塞,直到它再次被设置 # Any number of threads may wait for the same event.任意数量的线程都可以等待同一个事件