我如何将论证传递给芹菜任务?

fuz*_*zes 4 django celery

这是我的芹菜任务

def task_a(arg1, arg2, arg3, arg4)
Run Code Online (Sandbox Code Playgroud)

我称这个任务如下

arg1是列表,arg2,3,4是整数

task_a.apply_async(arg1, arg2, arg3, arg4)
Run Code Online (Sandbox Code Playgroud)

我收到了一条错误消息

    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
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

我试着写一本字典并改变论点位置,他们都失败了......

小智 10

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

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


Lem*_*eur 8

delay将工作而不是apply_async:在这里看到doc

task_a.delay(*arg,**kwargs)
Run Code Online (Sandbox Code Playgroud)