风火编程--线程事件通知event

该博客介绍了用线程事件通知简单模拟供应链的过程。将上游定义为生产者,下游定义为消费者,且消费者消费速度大于生产者。模拟中,消费者等待生产者生产,库存达一定量生产者通知消费者消费,库存不足则停止消费,如此循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程事件通知, 简单模拟供应链

描述
上游定义为生产者, 下游定义为消费者. 消费者的消费速度大于生产者
模拟过程:

  1. 消费者等待生产者生产产品

  2. 库存达到一定数量后生产者发出通知, 消费者开始消费

  3. 库存不足时,消费者停止消费

  4. 2<->3循环
    CODE

    conding: utf-8

     from time import sleep
     from queue import Queue
     from threading import Event, Thread
     
     class ConThread(Thread):
         """消费者consume"""
     
         def __init__(self, q, pEvent, cEvent):
             Thread.__init__(self)
             self.q = q
             self.cEvent = cEvent
             self.pEvent = pEvent
     
     
         def work(self, sid):
             print("consuming, sid = {}".format(sid))
     
             sleep(1)
     
         def run(self):
     
             while True:
                 if self.q.qsize() < 5:
                     self.pEvent.set()
                     self.cEvent.wait()
                     self.pEvent.clear()
                 sid = self.q.get()
                 self.work(sid)
     
     
     
     class ProThread(Thread):
         """生产者produce"""
         def __init__(self, q, pEvent, cEvent):
             Thread.__init__(self)
             self.q = q
             self.cEvent = cEvent
             self.pEvent = pEvent
     
         def work(self, sid):
             self.q.put(sid)
             print("producing, stock, {}".format(self.q.qsize()))
             sleep(2)
         def run(self):
             for sid in range(1000):
                 self.work(sid)
     
                 if self.q.qsize() >= 10:
                     self.cEvent.set()  # 通知开始消费
                     self.cEvent.clear()
     
     
     if __name__ == '__main__':
         q = Queue(100)
         pEvent = Event()
         cEvent = Event()
         pThread = ProThread(q, pEvent, cEvent)
         cThread = ConThread(q, pEvent, cEvent)
         pThread.start()
         cThread.start()
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值