celery beat 排程参数
CELERYBEAT_SCHEDULE = {
'task every 20 seconds': {
'task': 'tasks.function',
'schedule': timedelta(seconds=20),
'args': [argument]
},
}
我的函数只需要一个参数。但是我想在一个工作者上调用它,并且传入多个参数。我该如何在 "args:" 中传递不同的参数,或者我该怎么做才能定义多个参数呢?
1 个回答
0
根据你的评论:
function(argument)
-> 工作人员执行的内容。function(arg1)
,function(arg2)
.... 我想要这个:
你可以用很多方法来完成这个工作,这里的参数应该是一个可迭代的对象,比如列表或元组:
1) 假设你的函数不返回任何值,只是处理传入的参数,比如打印出来,那么你可以使用简单的 for
循环,看看下面的例子(请阅读注释):
>>> def f(arg):
... print arg
...
>>> arguments = ('aa', 'bb') # it is a tuple
>>> for arg in arguments:
... f(arg)
...
aa # f('aa')
bb # f('bb')
>>>
2) 如果你的函数是处理传入的 arg
后返回一个值,并且你想把所有返回的值收集起来存储在某个序列中,比如列表,那么你可以使用列表推导式或者 map,看看下面的例子(请阅读注释):
>>> def f(arg):
... print "passed arguemnt is: ", arg
... i = arg * 2
... return i
...
>>> arguments = (11, 22)
>>> L = map(f, arguments) # (1) using map()
passed arguemnt is: 11 # f(11)
passed arguemnt is: 22 # f(22)
>>> L
[22, 44]
>>> L = [f(arg) for arg in arguments] # (2) using list compression
passed arguemnt is: 11 # f(11)
passed arguemnt is: 22 # f(22)
>>> L
[22, 44]
>>>
在最后两个技巧中,返回的值被存储在一个列表 L
中,我随后在命令行解释器中打印出来。
这个概念在其他编程语言中也是一样的,当你想重复执行某些语句时,你需要用到循环: