ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## **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. 关闭传输和事件循环]()