首页 > 其他 > 详细

生产者与消费者模型初探

时间:2019-02-27 12:58:23      阅读:132      评论:0      收藏:0      [点我收藏+]

1.引例

def producer():
    r = []
    for i in range(50):
        r.append(包子%s % i)
    return r
product= producer()

def comsummer(product):
    for index, baozi in enumerate(product):
        print(第%s个人,吃了%s % (index, baozi))
    return 0
eat = comsummer(product)

上述代码有一个弊端就是,必须得等到生产者把所有的‘包子’都生产完,再交给消费者‘吃包子’。这样浪费了内存,消费者只能等待生产者。

 

2.send()函数的功能

send()函数有着与__next__()方法一样的功能,使生成器运行到第一个yield为止。send()的另一个功能是,能将括号内的值,传送到生成器运行中断的那个yield。也就是send()函数生成器运行到某一个yield中断,然后可以将值传给这个yield。

#.send()功能演示

def pro():
    print(2018-19赛季最佳第一阵容)
    print(前锋NO.1)
    xiao_shuai = yield lebron james
    print(前锋NO.2)
    print(xiao_shuai)
    yield pual george

pl = pro()
print(pl.__next__())
re = pl.send(kevin durant)
print(re)

#运行结果:
2018-19赛季最佳第一阵容
前锋NO.1
lebron james
前锋NO.2
kevin durant
pual george

 

 

3.生产者与消费者模型

当程序中出现明显的两类任务,一类任务是负责生产,另外一类任务是负责处理生产的数据的(如爬虫),我们就可以利用该模型来处理。

import time

def consumer(name):
    print(我是%s,我要开始吃包子了 %name)
    while True:
        baozi = yield
        print(%s很开心地把%s吃掉了 %(name, baozi))

def producer():
    c1 = consumer(lebron)
    c2 = consumer(durant)
    c1.__next__()
    c2.__next__()
    for i in range(5):
        c1.send(第%s个包子 %i)
        c2.send(第%s个饺子 %i)

eat = producer()

#运行结果:
我是lebron,我要开始吃包子了
我是durant,我要开始吃包子了
lebron很开心地把第0个包子吃掉了
durant很开心地把第0个饺子吃掉了
lebron很开心地把第1个包子吃掉了
durant很开心地把第1个饺子吃掉了
lebron很开心地把第2个包子吃掉了
durant很开心地把第2个饺子吃掉了
lebron很开心地把第3个包子吃掉了
durant很开心地把第3个饺子吃掉了
lebron很开心地把第4个包子吃掉了
durant很开心地把第4个饺子吃掉了

 

def action(name1, name2):
    print(%s 和 %s 开始1v1斗牛啦! %(name1, name2))
    time.sleep(1)
    while True:
        action1 = yield
        print(%s直接一个加速过掉%s,然后%s %(name1, name2, action1))
        time.sleep(1)
        action2 = yield
        print(%s背身单打%s,%s %(name1, name2, action2))
        yield 1v1结束

def move():
    name1 = input(>>>)
    name2 = input(>>>)
    vs = action(name1, name2)
    vs.__next__()
    vs.send(一记战斧劈扣)
    end = vs.send(翻身跳投将球投进)
    print(end)

p = move()

 

生产者与消费者模型初探

原文:https://www.cnblogs.com/cjsword/p/10442879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!