异步 Python 模式
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/async-python-patterns。
技能介绍
你在解决什么问题
Python 里「多线程」和「多进程」并不总是合适:I/O 等待占主导时,阻塞式调用会把线程或进程空转掉,吞吐和延迟都很难控。asyncio 配合 async/await 用单线程事件循环调度协程,在等网络、磁盘或数据库响应时让出控制权,适合 FastAPI、aiohttp 这类异步 Web 栈,以及爬虫并发请求、WebSocket 实时通道、异步微服务之间的调用链。
技能如何组织思路
本技能把负载特征放在第一步:I/O 密集型才值得上异步;CPU 算力为主且几乎不等待外部资源时,应另选模型。选定方向后,再按场景挑并发形态——asyncio.create_task 与 asyncio.gather 做并行等待、Queue 做生产者-消费者、Semaphore/连接池限制并发度,并事先约定取消与超时策略。
执行层面强调三件事:超时避免挂死、背压避免无界堆积、结构化错误处理(try/except 与 TaskGroup 等)让失败可观测。文档还指向 resources/implementation-playbook.md,里面有更细的模式与示例,便于对照落地。测试与调试异步路径时,需要区分「事件循环里跑什么」与「哪里漏了 await」,技能指令里会要求把这些写进交付说明。
适用边界
- 简单一次性脚本、同步库已够用 → 不必强行异步。
- 运行环境不支持事件循环或依赖全是阻塞 API 且无替代 → 先评估改造成本。
- 纯 CPU 密集(大量数值计算、图像处理)→ 异步帮不上忙,考虑多进程或原生扩展。
使用场景
- 用 FastAPI 或 aiohttp 搭建 Web API,需要在单进程内并发处理大量数据库与上游 HTTP 请求而不阻塞事件循环
- 编写爬虫或数据采集脚本,要对数百个 URL 并发发起请求并合并结果,同时控制并发度与超时
- 开发 WebSocket 聊天或推送服务,要在同一进程里维持长连接并与其他异步 I/O 协同
- 微服务之间通过异步 HTTP 或消息队列通信,需要设计 task、gather、队列与取消策略
适合人员
- 维护 Python 后端服务的工程师,要把阻塞式数据库与第三方 API 调用改成 asyncio 路径以改善延迟
- 负责数据采集或监控脚本的开发,需要在可控并发下批量拉取外部接口并处理失败与重试
- 做实时产品(在线协作、通知、聊天)的后端开发,要在 WebSocket 与异步 I/O 之间统一错误与背压策略
- 正在把同步 Flask/Django 视图迁移到 FastAPI 或纯 asyncio 栈,需要对照模式文档选型 gather、队列与连接池