simple run results ocean celery_result_backend beat python django scheduled-tasks celery django-celery

python - run - Reintentar tareas con Django-Celery-Django/Celery



django-celery-results (2)

Tengo problemas para volver a intentar las tareas, aquí es cómo se ve una tarea de prueba

from celery.decorators import task @task() def add(x, y): if not x or not y: raise Exception("test error") return x+y

No puedo encontrar ningún tipo de documentación sobre cómo reintentar las tareas decoradas, todo lo que encontré fue esto:

self.retry(x,y, exc=exception, countdown=30)

que no parece funcionar con mi caso ya que no self está pasando self variable self del método.

Editar:

Estoy intentando lo siguiente ahora en vano:

from celery.decorators import task @task() def add(x, y): if not x or not y: try: raise Exception("test error") except Exception, e: add.retry([x, y], exc=e, countdown=30) return x+y

Obtuve el siguiente error:

TypeError ("el argumento de kwargs para los reintentos no puede estar vacío. La tarea debe aceptar ** kwargs, consulte http://bit.ly/cAx3Bg ",)


La tarea debe aceptar argumentos de palabras clave, se utilizan para pasar información, entre otras, sobre el recuento de reintentos. Creo que el código debería verse así:

from celery.decorators import task @task() def add(x, y, **kwargs): if not x or not y: try: raise Exception("test error") except Exception, e: add.retry(args=[x, y], exc=e, countdown=30, kwargs=kwargs) return x+y

**kwargs deben agregarse a la firma de la función de add y pasarse como kwargs=kwargs cuando se llama a reintentar.

Nota: este estilo quedó en desuso con el lanzamiento de apio 2.2 .


Puedes configurar tus parámetros de reintento en el decorador:

@task(default_retry_delay=5 * 60, max_retries=12) def foo(bar): try: ... except Exception, exc: raise foo.retry(exc=exc)