这是我的芹菜任务
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
就可以了。此方法很方便,因为它看起来像调用常规函数:在此处查看文档
task_a.delay(*arg,**kwargs)
delay
显然很方便,但是如果要设置其他执行选项,则必须使用apply_async
。
task_a.apply_async(args=[arg1, arg2])
请注意,传递的参数是一个列表。
要将参数传递给具有apply_async()
的任务,您需要将它们包装在一个列表中,然后将列表作为第一个参数传递,即apply_async([arg1, arg2, arg3])
.有关更多详细信息和示例,请参阅文档。
使用delay()
作为替代方法。好处是它保留了或多或少的函数参数接口,即不需要将参数包装在列表中。