对于如何在aiopg右侧使用连接轮询,我有点困惑。
我应该在请求之前每次打电话给async with db.acquire() as conn:,还是只打一个电话给acquire?
例如,我有一些enpoint在数据库中进行了一些查询(没有事务)。假设有两种方法:
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)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的设置,它是否意味着池连接的最大大小计算?
发布于 2019-05-23 15:21:50
考虑到第一种方法,因为它非常重要,所以重用连接总是更好。例如,看看aiopg中的这个例子,连接正在被重用。一般来说,这是一个很好的实践,与异步编程无关。
对于async with db.acquire()来说,它是异步上下文管理器,这意味着coroutine可以放弃输入和退出它下面的一个块。见https://docs.python.org/3/reference/datamodel.html#context-managers和https://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的异步版本。
https://stackoverflow.com/questions/56260079
复制相似问题