Задача Celery не может быть вызвана (отсутствуют позиционные аргументы) из приложения Django - PullRequest
0 голосов
/ 28 февраля 2019

Хорошо, я пролил все SO сообщения, документы Celery и т. Д., И я просто не могу понять это.Независимо от того, что я пытаюсь или как я пытаюсь вызвать задачу из приложения Django, Celery жалуется, что я не предоставляю необходимые параметры.

"TypeError: add () отсутствует 2 обязательных позиционных аргумента: 'x' и 'y'".

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

add.delay(1, 2)

и все та же ошибка.Я также попробовал add.delay(x=1, y=2), celery.send_task("add", [1, 2]) и множество других способов, которыми я видел задачи, вызываемые в различных сообщениях, и ни одна из них не работает.

Метод очень прост:

@shared_task
def add(x, y):
    return x + y

Я также попробовал его по имени, например:

@task(name="my_add")
def add(x, y):
    return x + y

Те же результаты.Что еще я могу упустить?

1 Ответ

0 голосов
/ 28 февраля 2019

Прежде всего, вы должны добавить больше информации в свой пост, связанный с вашей конфигурацией DJango & Celery.

Но я думаю, что ваша главная ошибка в декораторе @task, потому что кажется, что вам нужно будетиспользуйте Связанные задачи :

  • Связанная задача означает, что первым аргументом задачи всегда будет экземпляр задачи (сам), как и методы, связанные с Python. Ссылка .
  • С другой стороны, аргумент bind означает, что функция будет «связанным методом», так что вы сможете получить доступ к атрибутам и методам в задаче.введите экземпляр. Ссылка

Таким образом, ваш код должен выглядеть следующим образом:

import celery

@task(bind=True, name="my_add")
def add(self, x, y):
    return x + y

Обратите внимание, что связывает аргумент сДекоратор задач предоставит доступ к себе (экземпляр типа задачи).

Наконец, я рекомендую вам еще раз просмотреть настройку Celery на Django .

...