一、协程的认识

协程(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中也可以传递参数用于在切换执行时相互传递值。
greenlet示例

相关文章: