0
런타임시 샐러리 작업에 대한 재시도 지연을 수정하는 방법이 있습니까? 또는 180s 기본값을 무시하도록 변경할 수있는 글로벌 구성 값이 있습니까?런타임시 샐러리 작업의 default_retry_delay를 변경 하시겠습니까?
지수 백 오프 (여기에 설명 된대로 : Retry Celery tasks with exponential back off)로 작업을 설정했지만 통합 테스트를 할 때이 값을 무시하고 싶습니다.
예외 처리기 내에서 예외가 발생하면 카운트 다운 인수를 무시하고 무시하는 것처럼 보이는 경우 종종 180s 기본값을 트리거합니다.
class BaseTask(celery.Task):
def on_retry(self, exc, task_id, args, kwargs, einfo):
"""Log the exceptions at retry."""
logger.exception(exc)
logger.warning('Retry: {}.'.format(self.request))
super().on_retry(exc, task_id, args, kwargs, einfo)
def on_failure(self, exc, task_id, args, kwargs, einfo):
"""Log the exceptions on failure."""
logger.exception(exc)
logger.error('Failure: {}.'.format(self.request))
super().on_failure(exc, task_id, args, kwargs, einfo)
@property
def backoff_countdown(self):
return int(random.uniform(2, 4) ** self.request.retries)
@celery.task(bind=True, base=BaseTask)
def process(self, data):
try:
return some_task(data)
except Exception as exc:
raise self.retry(exc=exc, coundown=self.backoff_countdown)
에 관계없이 나는 (심지어 단지
1
반환)
self.backoff_countdown
설정 무엇을 나는 작업이 정말 열심히 합리적인 제한 시간과의 통합 테스트를 실행 할 수있는
180s
에서 시도되고 끝낼.
네, 그 설정을 알고 있지만 런타임에서 변경할 수있는 것은 아닙니다. 적어도 볼 수있는 것은 아닙니다. 어쩌면 나는 이것을 틀리게 표현하고있을 것입니다. 나는 3 분간의 정상적인 재시도 지연으로 괜찮 았고 나는 그것을 소스에서 변경하고 싶지 않습니다. 그러나 내가 주입 할 수있는 몇 가지 구성 설정이나 내 테스트에 추가 한 일부 계측에 의해 도커 이미지에서 동일한 소스를 실행할 때이 값을 무시하고 싶습니다. – sas
작업 개체의 재시도 메서드를 재정의하는 방법은 무엇입니까? – Jinje
이 코드는 도커 컨테이너에서 실행 중입니다. 내가 할 수있는 최선의 방법은 설정 파일을 주입하거나 env 변수를 설정하는 것이다. 나는 env 변수를 통해'@ celery.task (... default_retry_delay = ...)'에 값을 삽입하려고 시도 할 수 있다고 생각하지만, 너무 복잡하고 배가 가고 싶지 않은 것 같습니다. – sas