threading Condition方法
主要用于生产者,消费者模型
消费者消费速度大于生产者生产速度例子class Dispatcher: def __init__(self): self.data = None self.event = threading.Event() def produce(self, total): for _ in range(total): data = random.randint(0,100) logging.info(data) self.data = data self.event.wait(1) self.event.set() def consume(self): while not self.event.is_set(): data = self.data logging.info("recieved {}".format(data)) self.data = None self.event.wait(0.5)d = Dispatcher()p = threading.Thread(target=d.produce, args=(10, ), name='producer')c= threading.Thread(target=d.consume, name='consumer')c.start()p.start()# 消费者主动去消费,需要主动去查看下生产者有没有生产数据
使用Condition改换成通知机制
生产者生产出数据,通知消费者来消费
class Dispatcher: def __init__(self): self.data = None self.event = threading.Event() self.cond = threading.Condition() def produce(self, total): for _ in range(total): data = random.randint(0,100) with self.cond: logging.info(data) self.data = data self.cond.notify(2) # self.cond.notify_all() self.event.wait(1) self.event.set() def consume(self): while not self.event.is_set(): with self.cond: self.cond.wait() data = self.data logging.info("recieved {}".format(data)) self.data = None self.event.wait(0.5)d = Dispatcher()p = threading.Thread(target=d.produce, args=(10, ), name='producer')# c= threading.Thread(target=d.consume, name='consumer')# c.start()for i in range(5): c = threading.Thread(target=d.consume, name="consumer-{}".format(i)) c.start()p.start()
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。