Python事件機制
事件機制:
這是線程間最簡單的通信機制:一個線程發送事件,其他線程等待事件
事件機制使用一個內部的標志,使用set方法進行使能為True,使用clear清除為false
wait方法將會阻塞當前線程知道標記為True
import queue from random import randint from threading import Thread from threading import Event class WriteThread(Thread): def __init__(self,queue,WEvent,REvent): Thread.__init__(self) self.queue = queue self.REvent = REvent self.WEvent = WEvent def run(self): data = [randint(1,10) for _ in range(0,5)] self.queue.put(data) print("send Read Event") self.REvent.set() #--> 通知讀線程可以讀了 self.WEvent.wait() #--> 等待寫事件 print("recv write Event") self.WEvent.clear() #-->清除寫事件,以方便下次讀取 class ReadThread(Thread): def __init__(self,queue,WEvent, REvent): Thread.__init__(self) self.queue = queue self.REvent = REvent self.WEvent = WEvent def run(self): while True: self.REvent.wait() #--> 等待讀事件 print("recv Read Event") data = self.queue.get() print("read data is {0}".format(data)) print("Send Write Event") self.WEvent.set() #--> 發送寫事件 self.REvent.clear() #--> 清除讀事件,以方便下次讀取 q= queue.Queue() WEvent = Event() REvent = Event() WThread = WriteThread( q, WEvent, REvent) RThread = ReadThread(q, WEvent, REvent) WThread.start() RThread.start()
結果:
send Read Event recv Read Event read data is [9, 4, 8, 3, 5] Send Write Event recv write Event