线程事件通知, 简单模拟供应链
描述
上游定义为生产者, 下游定义为消费者. 消费者的消费速度大于生产者
模拟过程:
-
消费者等待生产者生产产品
-
库存达到一定数量后生产者发出通知, 消费者开始消费
-
库存不足时,消费者停止消费
-
2<->3循环
CODEconding: 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()