我有一個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分鐘,但這並沒有幫助。
連接(會話?)處理如何與此配置一起使用?我該怎麼做才能避免這種錯誤?