day32
协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:
协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。
复习yield
1 def f(): 2 print('ok1') 3 count = yield 5 4 print('count:', count) 5 print('ok2') 6 yield 67 7 8 gen = f()#生成器对象 9 10 ret1 = next(gen)#返回5 等同ret1 = gen.send(None) 11 print(ret1) 12 #从count = yield处开始执行 13 ret2 = gen.send(10)#返回67 14 print(ret2)
第十行执行到yield = 5,返回一个5。
下一次从count = yeild开始执行。
ok1 5 count: 10 ok2 67 Process finished with exit code 0
yield协程并发
1 def consumer(name): 2 print("--->starting eating baozi...") 3 while True: 4 new_baozi = yield 5 print("[%s] is eating baozi %s" % (name, new_baozi)) 6 # time.sleep(1) 7 8 def producer(): 9 next(con) 10 next(con2) 11 n = 0 12 while n < 5: 13 n += 1 14 con.send(n) 15 con2.send(n) 16 print("