【问题标题】: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)
- 我将其更改为如下所示: