5

AWS スポット インスタンスで長いべき等タスクを実行するセットアップがありますが、タスクの途中で強制終了されたワーカーをエレガントに処理するように Celery をセットアップする方法がわかりません。

現時点でワーカーが強制終了された場合、タスクは失敗としてマークされます (WorkerLostError)。この件に関するドキュメントは少し無駄が多いことがわかりましたが、このシナリオでは CELERY_ACKS_LATE を使用することをお勧めします。これはうまくいきません。タスクはまだ失敗としてマークされています。

私が CELERY_ACKS_LATE=False を持っていたとき、タスクは保留中のままだったので、少なくとも今は失敗したことがわかります。これは良いスタートです。

現時点での私の構成設定は次のとおりです。

# I'm using rabbit-mq as the broker
BROKER_HEARTBEAT = 10
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_TRACK_STARTED = True

未処理のタスクの結果をチェックし、ローカル データベースの更新を処理してタスクを完了としてマークする (そして結果を使用して作業を実行する) マスター サーバー上で回転するタスクがあります。この段階で、「ワーカーが途中で終了しました: シグナル 15 (SIGTERM)」というシナリオをキャッチして、タスクを再試行する必要があると思います。

これはすべてセロリで処理する必要があるように感じるので、構成で基本的なものを見逃しているように感じます。

失敗する冪等のタスクとワーカーがある場合、これらのタスクが別のワーカーによって取得されるようにセロリを構成する最良の方法は何ですか?

4

0 に答える 0