件名が言うように、定義された "max_retries" カウントに達するまで再試行していたタスクは、ランダムな回数の後に再試行を停止することがあります :/. 数百回で再試行を停止することもあれば、ほんの数回で再試行を停止することもあります。
私が気づいたのは、「セロリビート」プロセスを再起動すると、数分後、何時間も「かなり」だったいくつかのタスクが、必要に応じて再試行を開始することです。
発生し始めた時期を正確に特定することはできませんが、Celery、RabbitMQ、または Django のアップグレード後である可能性があります。
なぜこれが起こっているのか誰にも分かりますか?
私は走っています:
Django: 1.7.3
RabbitMQ: 3.4.2
celery:3.1.17
kombu:3.0.24
billiard:3.3.0.19
python:2.7.3
py-amqp:1.4.6
セロリの設定:
CELERY_ACKS_LATE = True
CELERY_SEND_EVENTS = True
CELERY_TRACK_STARTED = True
CELERY_DISABLE_RATE_LIMITS = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_SEND_TASK_SENT_EVENT = True
タスクコードはスマートに見えます。このような:
class ABCTask(AbortableTask):
ignore_result = False
max_retries = 288*5
def run(self):
try:
[...]
except NoAvailableDevices as e:
try:
self.retry(exc=e)
except MaxRetriesExceededError, e:
[...]
ありがとう、ローリス