由于QueuePool溢出限制,Flask SqlAlchemy MySQL连接超时

时间:2016-07-10 19:33:55

标签: python mysql flask flask-sqlalchemy connection-timeout

我需要帮助解决第16次数据库连接时出现的以下错误。 Stackoverflow上的其他答案似乎都不起作用:

QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30

后端配置:

  • Python 2.6.9
  • Flask 0.10.1
  • Flask-SQLAlchemy 2.1
  • Mysql-connector-python 1.0.12
  • Mysql 5.6.27

数据库设置:

connection_str = 'mysql+mysqlconnector://%s:%s@%s:%s/%s' % (config["DATABASE_USER"], config["DATABASE_PASSWORD"], \
                                                            config["DATABASE_HOST"], config["DATABASE_PORT"], \
                                                            config["DATABASE_SCHEMA1"])
engine = create_engine(connection_str, convert_unicode=True, pool_recycle=config["DATABASE_POOL_RECYCLE"])
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()

import application_package.models
Base.metadata.create_all(bind=engine)


@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()

1 个答案:

答案 0 :(得分:1)

我意识到问题是我创建了一个单独的线程池,其中的线程没有终止,并且即使在响应返回给客户端之后也保持所有数据库连接都打开。这是一个糟糕的黑客和可怕的想法。我打算摆脱这个线程池并使用celery来安排异步任务。