Flask应用程序已达到QueuePool限制

时间:2018-06-28 15:46:25

标签: python flask sqlalchemy 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)

现在,据我所知,通过使用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)

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

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。问题是我有很多进程“处于空闲状态”,因为在使用Fold:1 [0 1 3 4 5 6 7 9] [0 1 2 3 4 5 8 9] [2 8] [6 7] Fold:2 [0 1 2 3 5 6 7 8] [0 2 3 4 6 7 8 9] [4 9] [1 5] Fold:3 [0 2 3 4 5 7 8 9] [0 1 3 5 6 7 8 9] [1 6] [2 4] Fold:4 [0 1 2 4 5 6 8 9] [1 2 4 5 6 7 8 9] [3 7] [0 3] Fold:5 [1 2 3 4 6 7 8 9] [0 1 2 3 4 5 6 7] [0 5] [8 9]

进行某些数据库SELECT语句后,我没有调用db.session.commit()

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

Query.first()

答案 1 :(得分:0)

每次与数据库进行查询会话时,只需断开连接即可。

products = db.session.query(Product).limit(20).all()
db.session.remove()