まず第一に、この質問を この質問の重複と見なさないでください
とをcelery
とredis
として使用する環境をセットアップしました。私の質問は、セロリ ワーカーがクラッシュしたときに、セロリ ワーカーがバックアップされたときに、スケジュールされたすべてのタスクが再試行されるようにするにはどうすればよいかということです。 broker
result_backend
を使用することに関するアドバイスを見たことがありますCELERY_ACKS_LATE = True
。これにより、ブローカーは ACK を取得するまでタスクを再実行しますが、私の場合は機能しません。タスクをスケジュールするたびに、そのタスクはすぐにワーカーに送られ、スケジュールされた実行時間まで保持されます。いくつか例を挙げましょう:
次のようなタスクをスケジュールしています:res=test_task.apply_async(countdown=600)
が、すぐにセロリ ワーカー ログに : のようなものが表示されますGot task from broker: test_task[a137c44e-b08e-4569-8677-f84070873fc0] eta:[2013-01-...]
。セロリ ワーカーを強制終了すると、これらのスケジュールされたタスクが失われます。私の設定:
BROKER_URL = "redis://localhost:6379/0"
CELERY_ALWAYS_EAGER = False
CELERY_RESULT_BACKEND = "redis://localhost:6379/0"
CELERY_ACKS_LATE = True