如何用动态输入实用地安排Celery任务?

时间:2012-07-12 10:13:18

标签: python django celery django-celery

我遇到这种情况,我需要务实地安排任务,每次需要执行时,任务定义都需要某些输入参数。请考虑以下任务功能:

@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

2 个答案:

答案 0 :(得分:2)

我也遇到过这个问题,我认为还有另一种方法可以帮助你。 @ narced133的答案只有在各种参数有限的情况下才有效,那么如果我们有数以千计的参数,该怎么办?

溶液: 重构你的celery task以接受函数作为param,该函数将生成或获取对于celery taskadd_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)
    },
}