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个包子做出来了,分给李四
包子都吃完了,吃货们该走了!