Retrying tasks with Django-Celery - Django/Celery

RadiantHex picture RadiantHex · Feb 1, 2011 · Viewed 14.4k times · Source

I'm having problems retrying tasks, here is what a test task looks like

from celery.decorators import task

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

I cannot find any documentation what-so-ever on how to retry decorated tasks, all I found was this:

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

which doesn't seem to work with my case as there is not self variable being passed from the method.

Edit:

I'm trying the following now to no avail:

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

I get the following error:

TypeError("kwargs argument to retries can't be empty. Task must accept **kwargs, see http://bit.ly/cAx3Bg",)

Answer

dalore picture dalore · Mar 4, 2013

You can set your retry parameters in the decorator:

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