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

Flask SqlAlchemy MySQL connection timed out due to QueuePool overflow limit

请帮助我解决在第 16 个数据库连接时遇到的以下错误。 None Whosebug 上的其他答案似乎有效:

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

后端配置:

数据库设置:

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()

我意识到问题是我创建了一个单独的线程池,其中的线程没有终止,并且即使在响应已返回给客户端后,我的所有数据库连接仍保持打开状态。这是一个糟糕的黑客和糟糕的想法。我打算去掉这个线程池,改用celery来调度异步任务。