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个包子做出来了,分给李四
包子都吃完了,吃货们该走了!
原文地址:https://www.cnblogs.com/huangxm/p/5225553.html