文档地址:https://docs.python.org/3/library/asyncio.html
文档第一句话说得很明白,asyncio是单线程并发,这种event loop架构是很多新型异步并发技术的选择,包括Node.js、Spring Webflux等 过上篇提的Golang不是,而且有gopher不太承认event loop。
一、Base Event Loop
1、关于event loop:它是asyncio的中心执行调度设施,它有以下功能:
1.1、注册、调用、取消回调函数的执行
1.2、为各种通信通道提供客户服务器双端通讯机制
1.3、启动子进程,并使其与外部程序通信的通讯关联起来。
1.4、把耗时任务微弱给线程池
2、Call,绝大多数回调函数不接受关键字参数,如果你想给回调函数传参,那只能用functools.partial()
3、延迟调用:event loop 有它自己的内部时钟用来计算延迟时间。
4、Futures: Promise设计模式的实现
5、Tasks
6、Client-end: Creating connections
7、Server-end:Creating listening connections
8、观察文件描述符
9、低阶Socket操作
10、解析主机名
11、连接通道
12、Unix信号
13、Executor:执行器,在线程池里或者进程池里调用一个函数,event loop默认使用线程池
14、错误处理
15、debug模式
16、Server:Socket Server
17、Handle:可以用来取消一个函数的执行
18、Event Loop代码样例
二、Event Loop
1、Event loop的默认策略及设置,以及跨平台的一些问题
三、任务和协程
1、协程:iscoroutinefunction()和
iscoroutine()
2、任务:调度协程的执行,把它封装进future,一个任务是Future的子类
四、通讯和协议
1、asyncio用Transport抽象各种类型通信通道,asyncio目前支持长度transport有TCP、UDP、SSL和子进程通道。
2、协议:asyncio提供了一个基类用来实现自己的网络协议
五、基于协程的流API
六、子进程:高阶API与低阶API
七、同步操作元语:与threading的API设计相近
1、锁:Lock、Event、Conditon
2、信号量
八、消息队列
1、Queue:用来协调生产者和消费者协程
九、asyncio开发技巧: