2012-07-12 30 views
2

我有这种情况,我需要务实地安排一项任务,并且任务定义每次需要执行时都需要一定的输入参数。请看下面的任务功能:如何务实地用动态输入安排芹菜任务?

@task 
def add_numbers(a, b): 
    sum = a + b 
    return sum 

现在,如果我需要在不同的输入两个不同的时间实例上运行上述任务参数前T1-> add_numbers(4,5)和T2-> add_numbers(2,2 ),我该如何去做。谢谢您的帮助。

ENV:Django的1.4,芹菜3.0

+0

你好汗先生, 我们也尝试使用芹菜分配和安排我们的工作。我们有要求在运行时安排或重新安排任务。这个要求与您在问题中提到的要求非常相似。 我只是想检查你能够解决这个问题。 谢谢, Hussain Bohra – 2015-04-09 15:39:10

回答

0

参见定期任务的芹菜文档如何在一个指定的时间间隔调用带有参数的任务的例子。 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) 
    }, 
} 
+0

谢谢@ narced133的方向。它会尝试和更新。 – 2012-07-14 00:08:59

1

我也遇到了这个问题,我认为还有另一种方式来帮助你。 @ narced133的答案只适用于各种参数有限的情况,那么如果我们有几千种参数呢?

解决方案: 重构你的celery task接受功能PARAM,该函数将产生或获取对你的celery task真正PARAMS的PARAMS:add_numbers