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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。