我怎样才能将参数传递给芹菜任务?
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包装在列表中。
这是我的芹菜任务
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包装在列表中。