学习MCP开发,经常看到@asynccontextmanager。
@asynccontextmanager 是 Python 3.7+ 标准库 contextlib 提供的一个 装饰器,用来把 异步生成器函数 一键变成 异步上下文管理器(async context manager)。
它让你用 async with 管理异步资源的获取/释放时,不必写一整块样板类,只需几行 yield 代码即可。
原理
-
异步上下文管理器协议 =
__aenter__/__aexit__两个协程方法。 -
@asynccontextmanager帮你自动生成这两个方法;
你的函数只需负责:
① 在yield前完成异步初始化(获取资源);
② 在yield后完成异步清理(释放资源)。 -
yield值会成为async with ... as xxx里的xxx;
如果yield后面还有代码,则无论with块是否抛异常,都会执行(等价于__aexit__)。
举例
import asyncio
from contextlib import asynccontextmanager
@asynccontextmanager
async def open_connection(host, port):
"""异步建立 TCP 连接,退出时自动关闭。"""

最低0.47元/天 解锁文章
770

被折叠的 条评论
为什么被折叠?



