3

我有这种情况,我需要务实地调度一个任务,而任务定义每次需要执行时都需要一定的输入参数。考虑以下任务函数:

@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

4

2 回答 2

2

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

解决方案:重构您celery task以接受一个函数作为参数,该函数将生成或获取作为您的真正参数的参数celery task: add_numbers

于 2016-06-05T08:11:20.870 回答
1

有关如何以指定间隔调用带有参数的任务的示例,请参阅有关周期性任务的 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)
    },
}
于 2012-07-12T15:51:04.470 回答