Python Async Patterns 是一套面向 Python asyncio 并发编程的模式集合,主要解决何时使用异步、如何正确编写异步代码以及避免常见陷阱的问题。
【用途】 该技能用于指导并发生 Python 程序的编写,专注于 asyncio 相关的模式。其触发条件包括 asyncio、async、await、coroutine、gather、semaphore、TaskGroup、event loop、aiohttp 等关键词。
【主要能力】 技能内容包含以下部分:
- 异步与同步的选用准则:以决策树形式给出建议,例如是否 CPU 密集型、是否 I/O 密集且高并发、连接数量多寡等,帮助判断该用同步还是异步。
- 核心概念:展示协程定义(必须 await)、入口点(asyncio.run)等基础代码示例。
- 并发模式:
- Pattern 1:使用 gather 并发执行多个任务。
- Pattern 2:通过 Semaphore 实现有界并发,限制并发请求数量。
- Pattern 3:使用 TaskGroup(Python 3.11+)实现结构化并发与自动清理。
- Pattern 4:使用 asyncio.timeout(Python 3.11+)进行超时控制。
- 关键警告:明确禁止在异步函数中使用阻塞调用,如 time.sleep、requests.get;并提醒 create_task 创建的任务需保留引用,否则可能被垃圾回收。
- 快速参考表:列出 gather、Semaphore、TaskGroup、Queue、timeout、Lock 等模式及其适用场景。
- 异步上下文管理器:通过 contextlib.asynccontextmanager 实现资源管理。
- 附加资源:提供多个参考文档,包括 concurrency-patterns.md(Queue、Lock、生产者-消费者)、aiohttp-patterns.md(HTTP 客户端/服务器模式)、mixing-sync-async.md(run_in_executor、线程池)、debugging-async.md(调试模式、性能分析)、production-patterns.md(优雅关闭、健康检查、信号处理)、error-handling.md(重试与退避、熔断器、部分失败)、performance.md(uvloop、连接池、缓冲区大小)。
- 脚本与资产:scripts/find-blocking-calls.sh 用于扫描异步函数中的阻塞调用;assets/async-project-template.py 提供生产就绪的异步应用骨架。
- 前置与相关技能:前置为 python-typing-ops(异步函数的类型提示);相关技能包括 python-fastapi-ops(异步 Web API)、python-observability-ops(异步日志与追踪)、python-database-ops(异步数据库访问)。
【使用方式】 该技能以模式文档与代码示例的形式提供,用户可在编写并发 Python 代码时参考对应的模式与参考文件。具体调用方式、安装步骤或命令行接口在给定资料中暂未提供。
【适用场景】 适用于 I/O 密集型操作(HTTP、数据库、文件)、高并发连接(数百以上)、WebSocket/流式连接、包含网络调用的微服务等。对于 CPU 密集型计算、简单脚本或一次性任务、小数据处理、少量连接的简单 I/O,资料建议使用同步方式。
【限制】 资料未提供该技能的收费、价格、平台支持、性能效果等具体信息。TaskGroup 与 asyncio.timeout 需要 Python 3.11 及以上版本。其他限制暂未提供。