我遇到这种情况,我需要务实地安排任务,每次需要执行时,任务定义都需要某些输入参数。请考虑以下任务功能:
@task
def add_numbers(a, b):
sum = a + b
return sum
现在,如果我需要在具有不同输入参数的两个不同时间实例上运行上述任务,例如ex-> add_numbers(4,5)和T2-> add_numbers(2,2),我该如何处理它。谢谢你的帮助。
ENV:Django 1.4,Celery 3.0
答案 0 :(得分:2)
我也遇到过这个问题,我认为还有另一种方法可以帮助你。 @ narced133的答案只有在各种参数有限的情况下才有效,那么如果我们有数以千计的参数,该怎么办?
溶液:
重构你的celery task
以接受函数作为param,该函数将生成或获取对于celery task
:add_numbers
的真正参数的参数。
答案 1 :(得分:0)
有关如何使用参数以指定间隔调用任务的示例,请参阅有关定期任务的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)
},
}