python生产者消费者模式

什么是生产者消费者模式

在软件开发的过程中,经常碰到这样的场景:
某些模块负责生产数据,这些数据由其他模块来负责处理(此处的模块可能是:函数、线程、进程等)。

产生数据的模块称为生产者,而处理数据的模块称为消费者。在生产者与消费者之间的缓冲区称之为仓库。

生产者负责往仓库运输商品,而消费者负责从仓库里取出商品,这就构成了生产者消费者模式。

以下有一个伙夫吃蒸馒头,三个吃货吃馒头的例子:

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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值