zoukankan      html  css  js  c++  java
  • python课堂整理20----生产者消费者模型

    一、实现功能:店铺生产包子,消费者来吃

    import time
    def producter():
        ret = []
        for i in range(10):
            time.sleep(0.1)
            ret.append('包子%s'%i)
        return ret
    
    def consumer(res):
        for index, baozi in enumerate(res):
            time.sleep(0.1)
            print('第%s个人吃了%s'%(index, baozi))
    
    a = producter()
    consumer(a)
    

    弊端:生产包子和吃包子是两个独立的过程,只有生产者把包子做完,消费者才能开始吃

    思考:怎么实现两个程序的并发过程

    ######################################

    从生成器入手,因为生成器函数能保留函数的运行状态

    def test():
        print('开始啦')
        yield 0
        print('第一次')
        yield 1
        print('第二次')
        yield 2
    
    t = test() #只是生成一个生成器函数,并没有执行
    print(t)
    res = t.__next__()
    print(res)
    

     

    ♦  send()

    ①send函数必须传入一个参数,也能触发一次生成器

    ②send将传入的参数传递给yield,此时再把yield赋给一个变量,即保留该参数

    def test():
        print('开始啦')
        first = yield 0   #接受send传过来的值,赋值给first
        print('第一次',first)
        yield 1
        print('第二次')
        yield 2
    
    t = test() #只是生成一个生成器函数,并没有执行
    res = t.__next__()
    print(res)
    a = t.send('我喜欢你')
    print(a)
    

    ♦用上述知识实现生产者消费者并发过程

    import time
    def consumer(name):
        print('我是%s,我准备吃包子了' %name)
        while True:
            baozi = yield
            time.sleep(0.1)
            print('%s开心地把%s吃掉了' %(name, baozi))
    
    
    def producter():
        c1 = consumer('dabai')
        c1.__next__()
        for i in range(10):
            time.sleep(0.1)
            c1.send('包子%s' %i)
        return '吃完了,真开心'
    a = producter()
    print(a)
    

    多人并发过程

    import time
    def consumer(name):
        print('我是%s,我准备吃包子了' %name)
        while True:
            baozi = yield
            time.sleep(0.1)
            print('%s开心地把%s吃掉了' %(name, baozi))
    
    
    def producter():
        c1 = consumer('dabai')
        c2 = consumer('jinling')
        c1.__next__()
        c2.__next__()
        for i in range(10):
            time.sleep(0.1)
            c1.send('包子%s' %i)
            c2.send('包子%s' %i)
        return '吃完了,真开心'
    a = producter()
    print(a)
    

    一个奋斗中的产品小白
  • 相关阅读:
    spark机器学习从0到1主成分分析-PCA (八)
    spark机器学习从0到1奇异值分解-SVD (七)
    spark机器学习从0到1决策树(六)
    spark机器学习从0到1支持向量机SVM(五)
    spark机器学习从0到1逻辑斯蒂回归之(四)
    spark机器学习从0到1基本的统计工具之(三)
    spark机器学习从0到1基本数据类型之(二)
    spark机器学习从0到1介绍入门之(一)
    python之感知器-从零开始学深度学习
    机器学习算法及代码实现–支持向量机
  • 原文地址:https://www.cnblogs.com/dabai123/p/11209874.html
Copyright © 2011-2022 走看看