Повторное выполнение заданий с помощью Django-Celery - Django / Celery - PullRequest
20 голосов
/ 01 февраля 2011

У меня возникают проблемы при повторном выполнении задач, вот как выглядит тестовое задание

from celery.decorators import task

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

Я не могу найти никакой документации о том, как повторить выполненные задания, все, что я нашел, это:

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

, что, похоже, не работает с моим делом, поскольку из метода не передается переменная self.

Редактировать:

I 'm пробую следующее сейчас безрезультатно:

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

Я получаю следующую ошибку:

TypeError ("аргумент kwargs для повторных попыток не может быть пустым. Задача должна принять ** kwargs, см. http://& # x62; it.ly/cAx3Bg ",)

Ответы [ 2 ]

26 голосов
/ 04 марта 2013

Вы можете установить параметры повтора в декораторе:

@task(default_retry_delay=5 * 60, max_retries=12)
def foo(bar):
  try:
      ...
  except Exception, exc:
      raise foo.retry(exc=exc)
16 голосов
/ 05 февраля 2011

Задача должна принимать аргументы ключевых слов, они используются для передачи информации среди прочего о количестве повторных попыток. Я думаю, что код должен выглядеть следующим образом:

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 необходимо добавить к сигнатуре функции add и передать как kwargs=kwargs при вызове retry.

Примечание: этот стиль устарел с выпуском сельдерея 2.2 .

...