我有一项任务,我想每小时运行一次。我需要运行它3次(对于列表中的每个元素),但不是让它们一个接一个地运行,我希望它们一次运行。这怎么可能与芹菜?我也在使用Flask。
现在,我有一个名为tasks.py的文件和我的任务,我使用celerybeat计划每小时运行一次。
这是我每小时打电话的功能:
请注意,我正在调用我导入文件的函数。
@celery.task
def stats():
list = [1,2,3]
functions = [sensor_stats(60, each) for each in list]
results = [function.wait() for function in functions]
更新 我定义了一个新任务,它将遍历列表并创建一个组,该组将为每个列表元素调用stats任务,即每个列表元素并行运行。
有关详细信息,请参阅http://celery.readthedocs.org/en/latest/reference/celery.html#celery.group
它看起来像这样:
@celery.task
def stats(interval, f_id):
sensor_stats(interval, f_id)
@celery.task
def sensor_statistics():
list = [1,2,3]
res = group
group(stats_function.s(60, each) for each in list)()
CELERYBEAT_SCHEDULE = {
'Stat Script': {
'task': 'tasks2.sensor_statistics',
'schedule': timedelta(hours=1),
'args': (),
}
}