validar try tipos sirve que por para imprimir excepciones errores error ejemplos diferentes comunes python celery django-celery

python - try - Reintentar tareas de apio con retroceso exponencial



para que sirve el raise en python (2)

Para una tarea como esta:

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(

si arroja una excepción y quiero volver a intentarlo desde el lado del daemon, ¿cómo se puede aplicar un algoritmo de retroceso exponencial, es decir, después de 2^2, 2^3,2^4 etc. segundos?

Además, ¿se realiza el reintento desde el lado del servidor, de modo que si el trabajador es asesinado, el próximo trabajador que genere tomará la tarea de reintento?



El atributo task.request.retries contiene la cantidad de intentos hasta el momento, por lo que puede usar esto para implementar un retroceso exponencial:

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)

Para evitar un problema de manada que truena , puede considerar agregar un jitter aleatorio a su retroceso exponencial:

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