asynccontextmanager

学习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 连接,退出时自动关闭。"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值