• python(4)–yield实现异步


    首先我们假设一个情景:一个人做包子,一次只能做一个;来了两个吃包子的,做包子做好了包子依次分给两个吃包子的。

    先上代码:

    import time
    
    '''
    一个做包子吃包子模型,一个做包子的,两个吃包子的,包子一个一个做,做好后依次分给两个吃包子的吃货
    '''
    
    def chibaozi(name):
        while True:
            baozi = yield
            print("第%s个包子做出来了,分给%s" % (baozi, name))
    
    def zengbaozi():
        chihuo1 = chibaozi('张三')     #定义两个吃货
        chihuo2 = chibaozi('李四')
        chihuo1.__next__()              #先执行一次next,为了让包子停在yield位置,准备打印
        chihuo2.__next__()
        print("厨师开始蒸包子了!!吃货们请各自就绪!!")
        for i in range(1, 11):
            if i%2 == 0:
                chihuo2.send(i)         #将i的值传给yield,请记住send()函数用法
            else:
                chihuo1.send(i)
            time.sleep(2)
        print("包子都吃完了,吃货们该走了!")

    运行一下,看看结果:

    厨师开始蒸包子了!!吃货们请各自就绪!!
    第1个包子做出来了,分给张三
    第2个包子做出来了,分给李四
    第3个包子做出来了,分给张三
    第4个包子做出来了,分给李四
    第5个包子做出来了,分给张三
    第6个包子做出来了,分给李四
    第7个包子做出来了,分给张三
    第8个包子做出来了,分给李四
    第9个包子做出来了,分给张三
    第10个包子做出来了,分给李四
    包子都吃完了,吃货们该走了!
  • 相关阅读:
    Java正则表达式教程
    神奇3D圣诞树祝广大技术人员圣诞快乐!
    SQL语句:Group By总结
    最全面的笔记本基本硬件参数介绍
    已安装的Flash Player不支持FlexBuilder调试
    模拟火车带你游西藏
    javascript技巧参考
    flex 与asp.net 配合之道
    ‍Android 尺寸和分辨率
    【windows】windows生产力/性能分析工具下载链接归档
  • 原文地址:https://www.cnblogs.com/huangxm/p/5225553.html
Copyright © 2020-2023  润新知