首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aiopg使用池连接

Aiopg使用池连接
EN

Stack Overflow用户
提问于 2019-05-22 15:16:33
回答 1查看 1K关注 0票数 0

对于如何在aiopg右侧使用连接轮询,我有点困惑。

我应该在请求之前每次打电话给async with db.acquire() as conn:,还是只打一个电话给acquire

例如,我有一些enpoint在数据库中进行了一些查询(没有事务)。假设有两种方法:

代码语言:javascript
复制
async def request_handle(request):
    db = request.config_dict['db']  # db is Engine
    async with db.acquire() as conn:
        await query_1(conn)
        await query_2(conn)
        await query_3(conn)
代码语言:javascript
复制
async def request_handle(request):
    db = request.config_dict['db']  # db is Engine
    await query_1(db)
    await query_2(db)
    await query_3(db)

在方法2中,每个函数调用async with db.acquire() as conn:

在aiopg的源代码中,我看到了名为max_size的设置,它是否意味着池连接的最大大小计算?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 15:21:50

考虑到第一种方法,因为它非常重要,所以重用连接总是更好。例如,看看aiopg中的这个例子,连接正在被重用。一般来说,这是一个很好的实践,与异步编程无关。

对于async with db.acquire()来说,它是异步上下文管理器,这意味着coroutine可以放弃输入和退出它下面的一个块。见https://docs.python.org/3/reference/datamodel.html#context-managershttps://www.python.org/dev/peps/pep-0492/#asynchronous-context-managers-and-async-with

另一件事是,您希望await query_1(db)而不是async query_1(db)query_1应该定义为async def关键字,并使用execute的异步版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56260079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档