python threading condition
threading time Producer(threading.Thread): run(self): count True: con.acquire(): count > 1000: con.wait() : count = count+100 msg = self.name+ + str(count) msg con.notify() con.release() time.sleep(1) Consumer(threading.Thread): run(self): count True: con.acquire(): count < 100: con.wait() : count = count-3 msg = self.name++str(count) msg con.notify() con.release() time.sleep(1) count = 500 con = threading.Condition() test(): i range(2): p = Producer() p.start() i range(5): c = Consumer() c.start() == : test()
个人理解:
代码生成了2个线程为生产者,5个线程为消费者
首先说明生产者和消费者是互不干扰的
首先说生产者是怎么生产的
首先第一个线程执行后比如说count就是600,这样释放锁,下一个线程开始跑累计+=100,每次生产完成通知消费者,当生产者发现count为1000时wait也就是等待
再说消费者一直再消费,当生产者生产为600时,消费者消费完事597,当count也就是产品为1000时,由于生产者wait,消费者消费了3个也就是997,这时消费者消费了3个后notify也就是通知生产者
说说这么做的好处
假如我生产者因为某种因素不生产了,这时消费者是不知道的,这时就需要生产者每生产一次就告诉消费者,同理生产者也要知道消费者是否在消费
而且如果生产者的生产的速率大大的大与消费的速度,这时wait可以通过伐值的判断来限制队列最大的长度
本文出自 “expect批量同步数据” 博客,请务必保留此出处http://4249964.blog.51cto.com/4239964/1573434
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。