Python線程間事件通知


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM