我需要帮助解决第16次数据库连接时出现的以下错误。 Stackoverflow上的其他答案似乎都不起作用:
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()
答案 0 :(得分:1)
我意识到问题是我创建了一个单独的线程池,其中的线程没有终止,并且即使在响应返回给客户端之后也保持所有数据库连接都打开。这是一个糟糕的黑客和可怕的想法。我打算摆脱这个线程池并使用celery来安排异步任务。