我有一个Flask应用程序来启动长时间运行的Celery任务(约10-120分钟/任务,有时候查询速度很慢)。我使用Flask-SQLAlchemy进行ORM和连接管理。我的应用程序是这样的:Flask + Celery + SQLAlchemy:数据库连接超时
app = Flask(__name__)
db = SQLAlchemy(app)
celery = make_celery(app)
@app.route('/start_job')
def start_job():
task = job.delay()
return 'Async job started', 202
@celery.task(bind=True)
def job(self):
db.session.query(... something ...)
... do something for hours ...
db.session.add(... something ...)
db.session.commit()
return
不幸的是,MySQL服务器我必须使用喜欢几分钟活动和芹菜任务后关闭连接无法处理的情况,所以经过大量的等待我得到( 2006年,“MySQL服务器已经消失”)错误。 AFAIK连接池应负责关闭连接。我读docs,但它只写了SQLALCHEMY_POOL_TIMEOUT
和SQLALCHEMY_POOL_RECYCLE
参数,所以根据一些随机的互联网文章,我尝试将回收周期更改为3分钟,但这并没有帮助。
连接(会话?)处理如何与此配置一起使用?我该怎么做才能避免这种错误?