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)