長時間実行されるCeleryタスク(〜10-120分/タスク、時には低速クエリ)を起動するFlaskアプリケーションがあります。 ORMと接続管理にFlask-SQLAlchemyを使用します。私のアプリは、次のようになります。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分に変更しようとしましたが、それは役に立たなかった。
この設定での接続(セッション?)の処理はどのように機能しますか?このようなエラーを避けるために私は何をすべきですか?