一、概述
Asyncio 是用来编写并发代码的库,使用 async/await 语法。asyncio被用作多个提供高性能 Python异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。asyncio往往是构建IO密集型和高层级结构化网络代码的最佳选择。
二、概念梳理
在理解框架前,准确理解各个概念很重要,这里将官方文档中的介绍加以整理。
- 协程:通过 async/await 语法进行声明。内部可以灵活控制执行分支,较线程开销更小。
- 可等待对象:如果一个对象可以在 await 语句中使用,那么它就是可等待对象。有三种主要 类型:协程, Task 和 Future。涉及IO操作的对象一般是可等待对象,这种对象会适时的释放CPU,以便其他代码有执行机会。
- Task:任务是被用来设置日程以便并发执行协程。当协程通过
asyncio.create_task()
等函数被打包为一个任务,该协程将自动排入日程准备立即运行。 - Future:一种特殊的低层级可等待对象,表示一个异步操作的最终结果。
- Queue:被用于多个异步Task对象的运行调度,实现连接池以及发布/订阅。
- 同步:用于Task对象集,类似线程的同步,主要用于资源访问控制。
- 事件循环:事件循环是asyncio应用的核心。事件循环会运行异步任务和回调,执行网络IO操作,以及运行子进程。开发者通常应当使用高层级的 asyncio 函数,例如
asyncio.run()
,应当很少有必要引用循环对象或调用其方法。