Flask 应用程序达到队列池限制

Kon*_*rad 6 python sqlalchemy flask flask-sqlalchemy

我正在使用 Flask 和 Flask-SQLAlchemy 运行一个应用程序。

from config import FlaskDatabaseConfig
from flask import Flask
from flask import request
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

application = Flask(__name__)
application.config.from_object(FlaskDatabaseConfig())
db = SQLAlchemy(application)

@application.route("/queue/request", methods=["POST"])
    def handle_queued_request():
        stuff()
        return ""

def stuff():
    # Includes database queries and updates and a call to db.session.commit()
    # db.session.begin() and db.session.close() are not called
    pass

if __name__ == "__main__":
    application.run(debug=False, port=5001)
Run Code Online (Sandbox Code Playgroud)

现在,根据我的理解,通过使用 Flask-SQLAlchemy,我不需要自己管理会话。那么,如果我依次运行多个请求到我的端点,为什么会出现以下错误?

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

我试过使用,db.session.close()但是,我的数据库更新没有正确提交,而不是这个错误。我做错了什么?处理完请求后是否需要手动关闭与数据库的连接?

Kon*_*rad 5

我已经找到了解决方案。问题是我有很多进程“在事务中处于空闲状态”,因为我db.session.commit()在使用某些数据库 SELECT 语句后没有调用Query.first()

为了对此进行调查,我直接使用以下命令查询了我的(开发)PostgreSQL 数据库:

SELECT * FROM pg_stat_activity
Run Code Online (Sandbox Code Playgroud)