一、协程的认识
协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。
简而言之,其实就是通过一个线程实现代码块相互切换执行。例如: def func1(): print(1) ... print(2) def func2(): print(3) ... print(4) func1() func2()
上面代码可以看出来,是串行的,如果有一个函数阻塞,则其它函要等待,导致时间浪费,这个就是协程存在的原因。
二、操作协程的模块有哪些呢?
在Python中有多种方式可以实现协程,例如: 1、greenlet,是一个第三方模块,用于实现协程代码(Gevent协程就是基于greenlet实现) 2、yield,生成器,借助生成器的特点也可以实现协程代码。 3、asyncio,在Python3.4中引入的模块用于编写协程代码。 4、async & awiat,在Python3.5中引入的两个关键字,结合asyncio模块可以更方便的编写协程代码。
1、greenlet示例
from greenlet import greenlet def func1(): print(1) # 第1步:输出 1 gr2.switch() # 第3步:切换到 func2 函数 print(2) # 第6步:输出 2 gr2.switch() # 第7步:切换到 func2 函数,从上一次执行的位置继续向后执行 def func2(): print(3) # 第4步:输出 3 gr1.switch() # 第5步:切换到 func1 函数,从上一次执行的位置继续向后执行 print(4) # 第8步:输出 4 if __name__ == '__main__': gr1 = greenlet(func1) gr2 = greenlet(func2) gr1.switch() # 第1步:去执行 func1 函数 # 输出结果 # 1 # 3 # 2 # 4 注意:switch中也可以传递参数用于在切换执行时相互传递值。