You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

aiopg中async with engine.acquire()是否会自动关闭连接?

关于async engine.acquire()上下文管理器的连接回收行为

问题复现代码

async with engine.acquire() as conn:
    await conn.execute(...)

解答

该上下文管理器不会在退出代码块时直接关闭对应PostgreSQL的物理连接,具体行为规则如下:

  • 进入async with块时,程序会从engine实例维护的连接池中取出一个空闲的PostgreSQL物理连接,绑定到conn变量供业务逻辑使用
  • 退出async with块时(无论代码正常执行完成还是中途抛出异常),上下文管理器会自动触发连接回收逻辑,默认是将连接放回连接池供后续请求复用,而非直接销毁物理连接
  • 只有以下场景才会真正关闭对应的PostgreSQL物理连接:
    • 显式调用await engine.dispose()销毁整个连接池
    • 连接超过了连接池预先配置的最大空闲时长,被自动清理
    • 连接在使用过程中出现网络断开、协议错误等不可恢复的异常,被判定为无效连接后销毁

如果是特殊业务场景需要每次使用完就立即关闭物理连接,可以在async with块内部最后显式调用await conn.close(),但绝大多数业务场景下复用连接池的连接性能远高于频繁新建/销毁连接,不建议主动关闭正常可用的连接。


内容的提问来源于stack exchange,提问作者mr_bulrathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:45:10