在这种情况下,我需要实际地调度任务,而任务定义每次需要执行时都需要特定的输入参数。考虑以下任务函数:
@task
def add_numbers(a, b):
sum = a + b
return sum
现在,如果我需要在两个不同的时间实例上使用不同的输入参数运行上面的任务,例如T1->add_numbers(4,5)和T2->add_nnumbers(2,2),我该怎么做呢?谢谢你的帮助。
ENV:Django 1.4,Celery 3.0
我也遇到了这个问题,我认为还有另一种方法可以帮助你。只有当params的变化是有限的,@narced133的答案才有效,那么如果我们有成千上万种params呢?
解决方案:重构celery task
以接受一个函数作为param,该函数将生成或获取celery task
:add_numbers
的真正param。
请参阅有关周期性任务的Celery文档,以获取如何在指定间隔使用参数调用任务的示例。http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries
在您的示例中,您可以使用以下内容:
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
'T1': {
'task': 'tasks.add_numbers',
'schedule': crontab(hour=7, minute=30, day_of_week=1),,
'args': (4, 5)
},
'T2': {
'task': 'tasks.add_numbers',
'schedule': crontab(hour=16, minute=0),,
'args': (2, 2)
},
}