2016-11-28 2 views
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에서 시도되고 끝낼.

답변

0

http://docs.celeryproject.org/en/latest/userguide/tasks.html#using-a-custom-retry-delay 문서를 참조하십시오. default_retry_delay를 설정하거나 카운트 다운 값을 설정할 수 있습니다.

@celery.task(bind=True, default_retry_delay=30 * 60) # retry in 30 minutes. 
def process(self, data): 
    try: 
     return some_task(data) 
    except Exception as exc: 
     # Retry in 5 minutes 
     raise self.retry(exc=exc, countdown=5 * 60) 
+0

네, 그 설정을 알고 있지만 런타임에서 변경할 수있는 것은 아닙니다. 적어도 볼 수있는 것은 아닙니다. 어쩌면 나는 이것을 틀리게 표현하고있을 것입니다. 나는 3 분간의 정상적인 재시도 지연으로 괜찮 았고 나는 그것을 소스에서 변경하고 싶지 않습니다. 그러나 내가 주입 할 수있는 몇 가지 구성 설정이나 내 테스트에 추가 한 일부 계측에 의해 도커 이미지에서 동일한 소스를 실행할 때이 값을 무시하고 싶습니다. – sas

+0

작업 개체의 재시도 메서드를 재정의하는 방법은 무엇입니까? – Jinje

+0

이 코드는 도커 컨테이너에서 실행 중입니다. 내가 할 수있는 최선의 방법은 설정 파일을 주입하거나 env 변수를 설정하는 것이다. 나는 env 변수를 통해'@ celery.task (... default_retry_delay = ...)'에 값을 삽입하려고 시도 할 수 있다고 생각하지만, 너무 복잡하고 배가 가고 싶지 않은 것 같습니다. – sas

관련 문제