## **asyncio —— 异步I/O、事件循环、协程和任务**
*在3.4版本中加入*
源代码:lib/asyncio/
***
此模块提供了 使用协程编写单线程并发代码、通过sockets和其他方式进行多路I/O访问、运行网络客户端和服务端以及其他相关原语的基础设施。下面是包内容的详细列表:
+ 一个包含各种特定系统实现的模块化[事件循环(event loop)]();
+ [传输]()和[协议]()抽象(类似于Twisted);
+ 对TCP、UDP、SSL、子进程管道(subprogress pipes)、延时调用以及其他的具体支持(有些可能是系统相关的);
+ 模仿concurrent.futures模块但适于事件循环(event loop)使用的[Future]()类;
+ 基于`yield from`([PEP 380]())的协程和任务,可以让你用顺序的方式编写并发代码;
+ 可以中止的[Future]()和协程;
+ 模仿[threading]()模块中的同步原语,可以用在单线程内的协程之间;
+ 当你不得不去使用一个将产生阻塞I/O的调用时,有接口可以把这个事件转移到线程池(threadpool);
相比传统的“顺序”编程,异步编程是更加复杂的:到[使用asyncio开发]()页面查看常见的陷阱列表和避免他们的方法。在开发过程中[启用调试模式]()来检测常见问题。
目录:
+ [1. 事件循环基类](217023)
* [1.1. 运行事件循环]()
* [1.2. 调用]()
* [1.3. 延时调用]()
* [1.4. Futures]()
* [1.5. 任务]()
* [1.6. 创建连接]()
* [1.7. 创建监听连接]()
* [1.8. 监视文件描述符(file descriptor)]()
* [1.9. 低级socket操作]()
* [1.10. 解析主机名]()
* [1.11. 管道连接]()
* [1.12. UNIX信号]()
* [1.13. 运行器(Executor)]()
* [1.14. 错误处理API]()
* [1.15. 调试模式]()
* [1.16. 服务端(Server)]()
* [1.17. Handle]()
* [1.18. 事件循环实例]()
- [1.18.1. 使用call_soon()的Hello World]()
- [1.18.2. 使用call_later()显示当前时间]()
- [1.18.3. 监视文件描述符的读取事件]()
- [1.18.4. 为SIGINT和SIGTERM设置信号处理程序]()
+ [2. 事件循环]()
* [2.1. 事件循环函数]()
* [2.2. 可用的事件循环]()
* [2.3. 平台支持]()
- [2.3.1. Windows]()
- [2.3.2. Mac OS X]()
* [2.4. 事件循环策略和默认策略]()
* [2.5. 事件循环策略接口]()
* [2.6. 获取全局循环策略]()
+ [3. 任务和协程]()
* [3.1. 协程]()
- [3.1.1. 实例:协程Hello World]()
- [3.1.2. 实例:协程显示当前日期]()
- [3.1.3. 实例:协程的链接]()
* [3.2. 无效状态错误(InvalidStateError)]()
* [3.3. 超时错误(TimeoutError)]()
* [3.4. Future]()
- [3.4.1. 实例:Future和run\_until\_complete()]()
- [3.4.2. 实例:Future和run\_forever()]()
* [3.5. 任务]()
- [3.5.1. 实例:任务并行执行]()
* [3.6. 任务函数]()
+ [4. 传输和协议(基于回调的API)]()
* [4.1. 传输(Transport)]()
- [4.1.1. 传输基类(BaseTransport)]()
- [4.1.2. 只读传输(ReadTransport)]()
- [4.1.3. 只写传输(WriteTransport)]()
- [4.1.4. 数据报传输(DatagramTransport)]()
- [4.1.5. 子进程传输基类(BaseSubprogressTransport)]()
* [4.2. 协议(Protocol)]()
- [4.2.1. 协议类]()
- [4.2.2. 连接回调函数]()
- [4.2.3. 流协议]()
- [4.2.4. 数据报协议]()
- [4.2.5. 流程控制回调]()
- [4.2.6. 协程和协议]()
* [4.3. 协议实例]()
- [4.3.1. TCP客户端协议]()
- [4.3.2. TCP服务端协议]()
- [4.3.3. UDP客户端协议]()
- [4.3.4. UDP服务端协议]()
- [4.3.5. 使用协议监听一个打开的socket并等待数据]()
+ [5. 流(Streams)(基于协程的API)]()
* [5.1. 流函数]()
* [5.2. 可读流(StreamReader)]()
* [5.3. 可写流(StreamWriter)]()
* [5.4. 可读流协议]()
* [5.5. 读取不完整错误]()
* [5.6. 缓冲区超出错误]()
* [5.7. 流实例]()
- [5.7.1. 使用流的TCP客户端]()
- [5.7.2. 使用流的TCP服务端]()
- [5.7.3. 获取HTTP头]()
- [5.7.4. 使用流监听一个打开的socket并等待数据]()
+ [6. 子进程(Subprocess)]()
* [6.1. Windows事件循环]()
* [6.2. 创建子进程:使用Process的高级API]()
* [6.3. 创建子进程:使用subprocess.Popen的低级API]()
* [6.4. 常量]()
* [6.5. 进程类(Process)]()
* [6.6. 子进程和线程]()
* [6.7. 子进程实例]()
- [6.7.1. 使用传输和协议的子进程]()
- [6.7.2. 使用流的子进程]()
+ [7. 同步原语]()
* [7.1. 锁(Locks)]()
- [7.1.1. Lock类]()
- [7.1.2. Event类]()
- [7.1.3. Condition类]()
* [7.2. 信号(Semaphores)]()
- [7.2.1. Semaphore类]()
- [7.2.2. BoundedSemaphore类]()
+ [8. 队列(Queues)]()
* [8.1. 队列类]()
* [8.2. 优先队列类]()
* [8.3. 先进先出队列类]()
+ [9. 使用asyncio开发]()
* [9.1. asyncio的调试模式]()
* [9.2. 中止]()
* [9.3. 并发与多线程]()
* [9.4. 正确地处理阻塞函数]()
* [9.5. 日志]()
* [9.6. 检查未被安排执行的协程对象]()
* [9.7. 检查未被处理的异常]()
* [9.8. 正确地链接协程]()
* [9.9. 挂起任务的销毁]()
* [9.10. 关闭传输和事件循环]()