模块级别的上下文管理资源

user4344:

我正在寻找一种模式,其中有多个功能需要访问上下文管理的资源。

特别是,我正在使用fastAPI并且想要重用aiopg(异步psycopg2)连接。

这是基本布局:

@app.get("/hello")
def hello():
    async with aiopg.connect(...) as conn:
        async with conn.cursor(...):
            return cursor.execute(...)

现在,我想避免每个路由的连接。我可以想到一个外部对象,在路由中,我要么访问conn属性,要么等待创建(并存储回去),然后仅使用withon cursor()方法。

class Pg():
    async def conn(self):
        if not self._conn:
            self._conn = await aiopg.connect(...)
        return self._conn

myPg = Pg()

@app.get("/hello")
def hello():
    conn = await myPg.conn()
    async with conn.cursor(...):
        return cursor.execute(...)

但是,这样我将失去自动关闭连接的能力。

我想我想念这里确实很明显的东西,希望有人可以指导我如何正确地实现这一点。

谢谢!

特里夫:

aiopg提供了一个可以管理连接Pool

只需在模块级别创建一个池实例:

pool = await aiopg.create_pool('<your connection string>')

然后,您可以使用Pool.acquire上下文管理器获取连接:

async with pool.acquire() as conn:
    ...

如果池中已经存在连接,则将重新使用它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spring上下文中查找方法级别的自定义注释

Spring Boot-使用上下文路径时在根级别的静态内容

使用上下文管理器管理多种资源的正确方法

Orion上下文代理日志级别

包资源管理器 URI eclipse 插件上下文菜单?

单击任何上下文菜单命令时,资源管理器崩溃

资源管理器上下文菜单中的Visual Studio代码

摆脱死掉的浮动资源管理器上下文菜单

将选项与Electron集成到资源管理器上下文菜单

使用Windows资源管理器的“打印”上下文菜单项

仅针对单个用户编辑Windows资源管理器上下文菜单

调试通过资源管理器上下文菜单启动的应用程序

任务栏>文件资源管理器>上下文菜单使我失败

如何更改Windows资源管理器的上下文菜单

编辑Windows资源管理器上下文菜单项说明

将子菜单添加到资源管理器上下文菜单

在列表视图中调用资源管理器上下文菜单

javascript模块模式上下文问题

为什么模块不能成为上下文管理器(对于“ with”语句)?

Python 上下文管理器

异步上下文管理器

opencensus - 顯式上下文管理

在上下文级别过滤所有表

Windows 资源管理器的自定义多项目上下文菜单条目

在Windows资源管理器中自定义Winrar上下文菜单处理程序

如何为Java应用程序向Windows资源管理器添加上下文菜单?

通过 Windows 资源管理器上下文菜单调用自定义存档程序

Windows资源管理器-从上下文菜单中区分两个文件?

可以在资源管理器上下文的“发送到”菜单上创建子文件夹