Program Tip

지수 백오 프로 셀러리 작업 재시도

programtip 2020. 11. 23. 19:56
반응형

지수 백오 프로 셀러리 작업 재시도


다음과 같은 작업의 경우 :

from celery.decorators import task

@task()
def add(x, y):
    if not x or not y:
        raise Exception("test error")
    return self.wait_until_server_responds(

예외가 발생하고 데몬 측에서 다시 시도하려는 경우 지수 백 오프 알고리즘을 적용하려면 어떻게해야 2^2, 2^3,2^4합니까?

또한 재 시도가 서버 측에서 유지되므로 작업자가 죽으면 스폰되는 다음 작업자가 재시도 작업을 수행합니까?


task.request.retries당신이 지수 백 오프를 구현하기 위해 사용할 수 있도록 속성은, 지금까지 시도 수를 포함합니다 :

from celery.task import task

@task(bind=True, max_retries=3)
def update_status(self, auth, status):
    try:
        Twitter(auth).update_status(status)
    except Twitter.WhaleFail as exc:
        self.retry(exc=exc, countdown=2 ** self.request.retries)

Thundering Herd 문제 를 방지하려면 지수 백 오프에 임의의 지터를 추가하는 것을 고려할 수 있습니다.

import random
self.retry(exc=exc, countdown=int(random.uniform(2, 4) ** self.request.retries))

Celery 4.2부터는 자동으로 지수 백 오프를 사용하도록 작업을 구성 할 수 있습니다. http://docs.celeryproject.org/en/master/userguide/tasks.html#automatic-retry-for-known-exceptions

@app.task(autoretry_for=(Exception,), retry_backoff=2)
def add(x, y):
    ...

(이것은 이미 Celery 4.1 문서에 있었지만 실제로는 릴리스되지 않았습니다. 병합 요청 참조 )

참고 URL : https://stackoverflow.com/questions/9731435/retry-celery-tasks-with-exponential-back-off

반응형