关于协程,最早出现在处理io密集型和计算密集型问题中,出现过多进程加协程的处理模式,首先关于协程,其本质就是一个微线程。
先说一下之前我们学到的线程和进程,这两者有一个非常明显和共同的特点,都属于抢占式程序,之间的切换是完全不受我们控制的,执行切换过程是属于操作系统级别的操作,所以与之对应,协程就出现了,其实协程的本质就是在你控制下进行线程之间的切换,其实我们在之前的生成器部分有讲到一个yield,就有类似的效果。
先来回顾一下yield的使用方法吧
def f(): print('hello world 1') yield print('hello world 2') yield print('hello world 3') gen = f()
print(type(gen)) gen.__next__() gen.__next__() gen.__next__()
当含有yield的函数在最初运行的时候,预运行的时候会被系统识别,正式开始运行的时候,不是直接开始输出其中的语句,而是生成一个生成器,随后我们可以通过内置方法next()或者__next__()方法调用,每调用一次就会输出到yield处,随后保存运行的状态,待下一次运行next()的时候继续从上一次的next处向下运行,遇到下一个yield时保存状态,停止运行,同时yield也有return的功能,同样可以返回参数。
其实yield的功能是类似于我们的协程的,所以我们先试用yield实现以下协程的功能。
import time import queue def consumer(name): print("--->ready to eat baozi...") while True: new_baozi = yield print("[%s] is eating baozi %s" % (name,new_baozi)) #time.sleep(1) def producer(): r = con.__next__() r = con2.__next__() n = 0 while 1: time.sleep(1) print("