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造成的早期通知问题(含代码)