什么是生产者消费者模式
在软件开发的过程中,经常碰到这样的场景:
某些模块负责生产数据,这些数据由其他模块来负责处理(此处的模块可能是:函数、线程、进程等)。
产生数据的模块称为生产者,而处理数据的模块称为消费者。在生产者与消费者之间的缓冲区称之为仓库。
生产者负责往仓库运输商品,而消费者负责从仓库里取出商品,这就构成了生产者消费者模式。
以下有一个伙夫吃蒸馒头,三个吃货吃馒头的例子:
import threading,time guo=[] class Huofu(threading.Thread): def run(self): while True: C_cond.acquire()#获得锁 if len(guo)==0: for i in range(1,31): print("伙夫生产第{}馒头".format(i)) guo.append(i) time.sleep(0.5) C_cond.notify_all()#生产完馒头后通知吃货开始吃馒头 C_cond.release()#释放锁 class Chihuo(threading.Thread): def __init__(self,name): threading.Thread.__init__(self) self.name=name def run(self): mantou=None while True: C_cond.acquire()#获取锁 if len(guo)>0: mantou=guo.pop() else: C_cond.wait()#当馒头没有了开始等待 C_cond.release()#释放锁 if mantou is not None: print("{}开始吃第{}个馒头:".format(self.name,31-mantou)) time.sleep(0.5) lock=threading.Lock() C_cond=threading.Condition(lock=lock) H=Huofu() C=Chihuo("曹操") C1=Chihuo("刘备") C2=Chihuo("孙权") H.start() C.start() C1.start() C2.start()