반응형
지수 백오 프로 셀러리 작업 재시도
다음과 같은 작업의 경우 :
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
반응형
'Program Tip' 카테고리의 다른 글
컬러 맵을 사용하여 matplotlib에서 선 색상 설정 (0) | 2020.11.23 |
---|---|
Gunicorn에서 실행되는 Flask 앱 디버깅 (0) | 2020.11.23 |
MVC3 편집기 읽기 전용 (0) | 2020.11.23 |
Hashmap은 int, char에서 작동하지 않습니다. (0) | 2020.11.23 |
피보나치 힙 데이터 구조의 직관은 무엇입니까? (0) | 2020.11.23 |