我有这种情况,我需要务实地调度一个任务,而任务定义每次需要执行时都需要一定的输入参数。考虑以下任务函数:
@task
def add_numbers(a, b):
sum = a + b
return sum
现在,如果我需要在两个不同的时间实例使用不同的输入参数 ex T1->add_numbers(4,5) 和 T2->add_numbers(2,2) 运行上述任务,我该怎么做。谢谢您的帮助。
环境:Django 1.4,芹菜 3.0
我有这种情况,我需要务实地调度一个任务,而任务定义每次需要执行时都需要一定的输入参数。考虑以下任务函数:
@task
def add_numbers(a, b):
sum = a + b
return sum
现在,如果我需要在两个不同的时间实例使用不同的输入参数 ex T1->add_numbers(4,5) 和 T2->add_numbers(2,2) 运行上述任务,我该怎么做。谢谢您的帮助。
环境:Django 1.4,芹菜 3.0
我也遇到了这个问题,我想还有另一种方法可以帮助你。@narced133 的答案只有在参数的变化有限的情况下才有效,那么如果我们有数千种参数怎么办?
解决方案:重构您celery task
以接受一个函数作为参数,该函数将生成或获取作为您的真正参数的参数celery task
: add_numbers
。
有关如何以指定间隔调用带有参数的任务的示例,请参阅有关周期性任务的 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)
},
}