我怎样才能将参数传递给芹菜任务?

how can i pass argument to celery task?

这是我的芹菜任务

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

我该如何解决这个问题??

我试过编字典和改变参数位置,都失败了...

delay 会起作用。这种方法很方便,因为它看起来像调用常规函数:请参阅文档 here

task_a.delay(*arg,**kwargs)

delay 显然很方便,但是如果你想设置额外的执行选项,你必须使用 apply_async.

task_a.apply_async(args=[arg1, arg2])

Note that the argument passed is a list.

要使用 apply_async() 将参数传递给任务,您需要将它们包装在一个列表中,然后将该列表作为第一个参数传递,即apply_async([arg1, arg2, arg3])。有关详细信息和示例,请参阅 documentation

使用delay()作为替代。好处是它或多或少保留了函数的参数接口,即不需要将args包装在列表中。