admin管理员组

文章数量:1487745

python知识点100篇系列(20)

什么是协程:

协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。

在Python中实现协程的方式有多种:

  • yield,生成器,借助生成器的特点也可以实现协程代码;
  • asyncio,在Python3.4中引入的模块用于编写协程代码;
  • async & awiat,在Python3.5中引入的两个关键字,结合asyncio模块可以更方便的编写协程代码;

使用最后一种方式编码的协程伪代码如下:

代码语言:python代码运行次数:0运行复制
import asyncio

async def func():
    print(1)
    await asyncio.sleep(2)  # 耗时操作
    print(2)


tasks = [ asyncio.ensure_future(func()) for i in range(10)]

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
协程相关概念:
  • 协程函数:定义函数时候由async关键字装饰的函数 async def 函数名
  • 协程对象:执行协程函数得到的协程对象

执行协程函数只会创建协程对象,函数内部代码不会执行。如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理。

asyncio.run( func())

  • await关键字:await + 协程对象,遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)。
  • Task对象

在事件循环中添加多个任务。Task用于并发调度协程,asyncio.create_task(协程对象)

代码语言:python代码运行次数:0运行复制
tasks = [asyncio.create_task(fun_a()),
             asyncio.create_task(fun_a()),
             ]

本文标签: python知识点100篇系列(20)