【问题标题】:SQLAlchemy raises QueuePool limit of size 10 overflow 10 reached, connection timed out after some timeSQLAlchemy 提出 QueuePool 大小为 10 的限制溢出 10 已达到,连接在一段时间后超时
【发布时间】:2016-12-13 20:27:16
【问题描述】:

在使用 Flask-SQLAlchemy 时,经过一段时间后,我始终收到错误“队列池限制大小为 10 溢出 10,连接超时”。我试图增加连接池的大小,但它只是推迟了问题。

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    initialize_db(app)

db = SQLAlchemy()

def initialize_db(app):
    db.init_app(app)

SQLALCHEMY_POOL_SIZE = 100

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    我发现了问题所在。问题是有时数据库连接会丢失状态,这会导致池大小在一段时间后耗尽。
    为了解决这个问题,我对查询超时的 MySQL 服务器配置进行了更改,并将其设置为 1 秒。
    1 秒后,如果查询没有响应,它将抛出异常,我在调用该查询的代码中添加了 except 块(在我的情况下是 GET 查询)。在 except 块中,我发出了回滚命令。

    【讨论】:

      【解决方案2】:

      我刚遇到这个问题。


      我的情况

      • 我还没有启动我的网站,所以我几乎所有的时间都在与本地版本进行交互,该版本是从 PyCharm 运行的(即在我的计算机上),所以我只注意到我本地的错误该网站的版本,我什至没有尝试查看它是否也会出现在 PythonAnywhere 托管的网站生产版本上。
      • 我正在使用 MySQL 数据库。
      • IIRC 当我开始频繁(每 10 秒)从前端 JavaScript 调用 API 时,我首先注意到了这个问题。
      • 我的app.run() 中有debug=False,所以它不是由debug=True 引起的,这是其他地方建议的。

      我是如何解决的

      当我在 app.run() 中删除 threaded=True 时,问题就消失了。

      • 所以,以前它看起来像这样:
        • app.run(debug=False, threaded=True)
      • 我将其更改为如下所示:
        • app.run(debug=False)

      【讨论】:

        猜你喜欢
        • 2016-09-29
        • 2020-02-20
        • 2016-11-12
        • 2021-08-22
        • 2018-04-14
        • 2014-09-17
        • 2016-11-25
        • 1970-01-01
        • 2016-07-29
        相关资源
        最近更新 更多