在 FastAPI 中将 SQLALCHEMY session 和 scoped_session 与相同的引擎一起使用

Jos*_*din 5 python database multithreading sqlalchemy fastapi

我将 sqlalchemy 与 FastAPI 服务器一起使用,当我Session从多线程函数(不是通过 http 请求)调用对象时遇到以下错误:

QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/13/3o7r)
Run Code Online (Sandbox Code Playgroud)

只有当我的服务器收到数百个请求并且我的线程工作人员很忙时才会发生此错误。

我读到sqlalchemy.scoped_session可用于后台守护程序。

执行以下操作使错误消失:

  1. Sessionhttp请求中的常规sqlalchemy对象,FastAPI.Depends()就像文档中推荐的那样
  2. sqlalcehmy scoped_session- 我的服务器在需要访问数据库的不同线程中在后台运行任务,但每个线程都有自己的会话

可以肯定地说,每个会话对象都得到了适当的处理(scoped_session调用remove()Session调用close()

我的问题是 - 当我使用单个引擎时,不建议使用这种方法吗?我应该走不同的道路吗?

谢谢!