如何在 SQLAlchemy 中为 ASGI 应用程序正确设置 pool_size (和 max_overflow)

Via*_*v Z 14 sqlalchemy python-asyncio asgi

我们正在使用 fastapi、uvicorn、sqlalchemy 和 PostgreSQL 构建 ASGI 应用程序。问题是:与具有多个工作线程的 WSGI 应用程序相比,我们应该如何设置pool_size才能create_async_engine不使其成为瓶颈?

据我了解,在 WSGI 应用程序中,如果我们使用每个(和)线程运行N进程,我们将获得最多连接。但是 ASGI 怎么样(如果我们有一个进程)——可以打开多少个连接?另外(因为我们每个进程只创建一个)?那么我们应该将其设置为?Mpool_size=MN * Mpool_sizeAsyncEnginepool_size=N * M

而且,如果我们简单地增加这个数字,那么我们就能够await向数据库发出更多的并发请求,对吧?

其背后的直觉是什么?

提前致谢!

小智 -2

在 sqlalchemy 中添加池大小和最大溢出,您可以使用

engine = create_async_engine(
    settings.ASYNC_SQLALCHEMY_URL,
    echo=settings.SQLALCHEMY_ECHO,
    pool_size=20,
    max_overflow=10,
)
Run Code Online (Sandbox Code Playgroud)

在 sqlalchemy 中,您没有最大池大小,但建议池大小为 20

  • 感谢您的回答。是的,我们知道这些设置,但是问题是 - “异步”功能如何影响这些参数的调整过程?如果我们发出比“pool_size”更多的“await”连接,会发生什么?他们会排队吗?什么队列? (5认同)