生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。

import time
import random

#如果缓冲区长度为5,缓冲区就满了,生产者不能再生存包子了
#如果不满5,生产者补足
cachelist =[]
cachelistlen=5

def isfull():
    #缓冲区满了
    return len(cachelist)==5

def consumer(name):
    """消费者"""
    print("%s准备买包子" %(name))
    while True:
        kind = yield
        print("%s买%s包子成功" %(name,kind))

def producer(chief):
    print("%s大厨正在做包子" %(chief))
    kinds=['梅菜','豆沙','粉条']
    while True :
        if not isfull():
        #模拟生产耗费的时间
            time.sleep(random.random())
            kind = random.choice(kinds)
            print("%s已经做好%s包子了" %(chief,kind))
            cachelist.append(kind)
        else:
            yield
p=producer('杜')
next(p)
consumers = [consumer('宝宝'+str(i)) for i in range(10)]
for i in consumers:
    if not cachelist:
        producer("目前还没有包子")
    else:
        if isfull():
            print("已经有足够的包子啦")
        else:
            next(p)
        kind = cachelist.pop()
        next(i) #执行消费者买包子
        i.send(kind)
        

结果

杜大厨正在做包子
杜已经做好豆沙包子了
杜已经做好豆沙包子了
杜已经做好粉条包子了
杜已经做好豆沙包子了
杜已经做好粉条包子了
已经有足够的包子啦
宝宝0准备买包子
宝宝0买粉条包子成功
杜已经做好梅菜包子了
宝宝1准备买包子
宝宝1买梅菜包子成功
杜已经做好粉条包子了
宝宝2准备买包子
宝宝2买粉条包子成功
杜已经做好梅菜包子了
宝宝3准备买包子
宝宝3买梅菜包子成功
杜已经做好梅菜包子了
宝宝4准备买包子
宝宝4买梅菜包子成功
杜已经做好粉条包子了
宝宝5准备买包子
宝宝5买粉条包子成功
杜已经做好粉条包子了
宝宝6准备买包子
宝宝6买粉条包子成功
杜已经做好粉条包子了
宝宝7准备买包子
宝宝7买粉条包子成功
杜已经做好粉条包子了
宝宝8准备买包子
宝宝8买粉条包子成功
杜已经做好梅菜包子了
宝宝9准备买包子
宝宝9买梅菜包子成功

图片描述


SheenStar
168 声望26 粉丝

祝你坚强