Как я могу передать аргумент задачи сельдерея? - PullRequest
0 голосов
/ 09 мая 2018

это мое задание из сельдерея

def task_a(arg1, arg2, arg3, arg4)

и я вызываю задачу следующим образом

arg1 - список, а arg2,3,4 - целое число

task_a.apply_async(arg1, arg2, arg3, arg4)

и я получил сообщение об ошибке

    File "/opt/envDjango/lib/python3.5/site-packages/celery/app/task.py", line 518, in apply_async
    check_arguments(*(args or ()), **(kwargs or {}))
    TypeError: functools.partial object argument after ** must be a mapping, not int

как я могу решить проблему ??

Я попытался создать словарь и изменить позицию аргумента, все они провалились ...

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Чтобы передать аргументы в задачу с apply_async(), вам нужно заключить их в список, а затем передать список в качестве первого аргумента, т.е. apply_async([arg1, arg2, arg3]). См. документацию для более подробной информации и примеров.

Используйте delay() в качестве альтернативы. Преимущество состоит в том, что он сохраняет более или менее интерфейс параметров функции, т. Е. Не нужно оборачивать аргументы в списке.

0 голосов
/ 09 мая 2018

delay будет работать вместо apply_async: см. Документ здесь

task_a.delay(*arg,**kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...