zoukankan      html  css  js  c++  java
  • python 线程间事件通知

    这是线程间最简单的通信机制:一个线程发送事件,其他线程等待事件
    事件机制使用一个内部的标志,使用set方法进行使能为True,使用clear清除为false
    wait方法将会阻塞当前线程知道标记为True

     1 import queue
     2 from random import randint
     3 from threading import Thread
     4 from threading import Event
     5 
     6 class WriteThread(Thread):
     7     def __init__(self,queue,WEvent,REvent):
     8         Thread.__init__(self)
     9         self.queue = queue
    10         self.REvent = REvent
    11         self.WEvent = WEvent
    12 
    13     def run(self):
    14             data = [randint(1,10) for _ in range(0,5)]
    15             self.queue.put(data)
    16             print("send Read Event")
    17             self.REvent.set()  #--> 通知读线程可以读了
    18             self.WEvent.wait() #--> 等待写事件
    19             print("recv write Event")
    20             self.WEvent.clear() #-->清除写事件,以方便下次读取
    21 
    22 class ReadThread(Thread):
    23     def __init__(self,queue,WEvent, REvent):
    24         Thread.__init__(self)
    25         self.queue = queue
    26         self.REvent = REvent
    27         self.WEvent = WEvent
    28     def run(self):
    29         while True:
    30             self.REvent.wait() #--> 等待读事件
    31             print("recv Read Event")
    32             data  = self.queue.get()
    33             print("read data is {0}".format(data))
    34             print("Send Write Event")
    35             self.WEvent.set()  #--> 发送写事件
    36             self.REvent.clear() #--> 清除读事件,以方便下次读取
    37 
    38 q= queue.Queue()
    39 WEvent = Event()
    40 REvent = Event()
    41 t1= WriteThread( q, WEvent, REvent)
    42 t2 = ReadThread(q, WEvent, REvent)
    43 
    44 t1.start() 
    45 t2.start()
  • 相关阅读:
    mysql死锁问题分析
    你应该知道的RPC原理
    如何健壮你的后端服务?
    如何用消息系统避免分布式事务?
    一个故事讲清楚NIO
    地图匹配实践
    利用模拟退火提高Kmeans的聚类精度
    大数据并行计算利器之MPI/OpenMP
    GPU---并行计算利器
    如何设计实现一个地址反解析服务?
  • 原文地址:https://www.cnblogs.com/zenan/p/8629835.html
Copyright © 2011-2022 走看看