celery beat 排程参数

1 投票
1 回答
4162 浏览
提问于 2025-04-18 03:16
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 中,我随后在命令行解释器中打印出来。

这个概念在其他编程语言中也是一样的,当你想重复执行某些语句时,你需要用到循环:

撰写回答