Python线程间事件通知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 




以上是关于Python线程间事件通知的主要内容,如果未能解决你的问题,请参考以下文章

将通知设置为在某个用户事件时触发

转:Java并发编程之十二:线程间通信中notifyAll造成的早期通知问题(含代码)

notify,wait,synchronized实现线程间通知

Java并发编程之十二:线程间通信中notifyAll造成的早期通知问题(含代码)

转:Java并发编程之十一:线程间通信中notify通知的遗漏(含代码)

线程间通信