Подтвердить что ты не робот

Повторные задания с Django-Celery - Django/Celery

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

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.

Изменить:

Я сейчас пытаюсь сделать следующее:

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://bit.ly/cAx3Bg",)


Любые идеи?

4b9b3361

Ответ 1

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

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 при вызове повтора.

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

Ответ 2

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

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