用途
python-async-patterns 是一份关于 Python asyncio 并发编程模式的参考文档,用于指导开发者编写异步、并发执行的 Python 代码。它的触发关键词包括 asyncio、async、await、coroutine、gather、semaphore、TaskGroup、event loop、aiohttp 等,表明其主题集中在异步编程领域。
主要能力
文档整理了多种并发编程模式:
- 协程与入口:使用 async def 定义协程(必须被 await),并通过 asyncio.run(main()) 作为入口运行。示例中展示了使用 aiohttp.ClientSession 发起异步 HTTP 请求并取回响应文本。
- Pattern 1 并发 gather:使用 asyncio.gather(*tasks, return_exceptions=True) 并发获取多个 URL。
- Pattern 2 有界并发:通过 asyncio.Semaphore(limit) 限制并发数量,示例中默认 limit 为 10。
- Pattern 3 TaskGroup(Python 3.11+):使用 async with asyncio.TaskGroup() 实现结构化并发,任务全部完成或抛出异常后退出上下文。
- Pattern 4 超时:使用 asyncio.timeout(5.0)(Python 3.11+)包装慢操作,并捕获 asyncio.TimeoutError。
- 异步上下文管理器:通过 contextlib.asynccontextmanager 编写异步资源管理逻辑。
使用方式
文档以代码示例呈现各模式的具体写法,并给出快速参考表,按“模式—使用场景”对应列出:gather 用于多个独立操作,Semaphore(n) 用于限流与资源约束,TaskGroup() 用于结构化并发(3.11+),Queue() 用于生产者-消费者,timeout(s) 用于超时包装(3.11+),Lock() 用于共享可变状态。
文档还说明了可进一步加载的参考文件,包括:并发模式(Queue、Lock、生产者-消费者)、aiohttp 模式(HTTP 客户端/服务器)、同步与异步混合(run_in_executor、线程池)、异步调试(调试模式、性能分析、问题定位)、生产模式(优雅关闭、健康检查、信号处理)、错误处理(带退避的重试、熔断器、部分失败)、性能(uvloop、连接池、缓冲区大小)。此外包含一个脚本 ./scripts/find-blocking-calls.sh 用于扫描异步函数中的阻塞调用,以及一个资源文件 ./assets/async-project-template.py 作为生产就绪的异步应用骨架。
适用场景
适用于需要以 asyncio 编写并发 Python 程序的场景,例如并发发起多个网络请求、限制并发资源占用、结构化地管理一组子任务、为异步操作设置超时,以及封装异步资源管理。文档中的快速参考表可帮助按场景快速选择对应模式。
限制与注意事项
文档强调了两类关键错误:一是阻塞事件循环,在异步函数中不应使用 time.sleep(5) 或 requests.get(url) 这类阻塞调用,正确做法是 await asyncio.sleep(5) 以及使用 aiohttp 等异步 HTTP 客户端;二是孤立任务,asyncio.create_task(work()) 创建的任务可能被垃圾回收,正确做法是保留任务引用并 await。
文档中部分模式(TaskGroup、asyncio.timeout)标注需要 Python 3.11+。其余关于收费、价格、平台、具体效果等信息,资料中暂未提供。