用途:在异步 Python 代码中创建异步上下文管理器,实现资源的自动生命周期管理(setup、use、cleanup),主要使用 @asynccontextmanager 装饰器模式。
主要能力:管理数据库会话或连接(主要用例)、处理需要清理的异步文件 I/O、管理网络连接并自动关闭、协调资源池的获取/释放、确保异步操作中的清理以防止资源泄漏、将同步上下文管理器转换为异步、实现带自动提交/回滚的事务管理。
使用方式:核心写法为 from contextlib import asynccontextmanager 与 from collections.abc import AsyncIterator,用 @asynccontextmanager 装饰 async 函数,在 try 中 yield 资源,在 finally 中执行清理,调用方使用 async with。实现模式有两种:@asynccontextmanager(推荐,适合简单资源管理)与自定义 aenter/aexit(适合有状态的复杂类)。要求 Python 3.9+,仅用标准库,无需额外安装。
适用场景:数据库会话/连接、异步文件读写、网络连接、资源池、事务管理,以及将同步上下文管理器改造为异步。
限制与注意:不适用于同步资源(应使用普通上下文管理器)、简单 try/finally(属于过度设计)或测试(应使用 pytest fixtures)。应始终使用 try/finally 保证清理,清理前检查资源非 None,清理错误只记录不抛出,入口处校验配置,使用 AsyncIterator[T] 类型提示,配置参数设为必填。避免缺少 finally、在 finally 中抛错、不跟踪资源状态、可选配置参数、遗漏 AsyncIterator 类型、不校验输入等做法。资料还提供参考文档、模板与转换/生成/校验脚本,具体内容暂未提供。