首页 > celery beat schedule如何循环执行一系列任务?

celery beat schedule如何循环执行一系列任务?

和官网的示例类似,我想要每隔20秒循环一次add(1,2),add(2,3) 和 add(3,4)这三个任务,代码改如何更改?

proj/__init__.py
         /celeryapp.py
         /tasks.py

celeryapp.py

from celery import Celery
from datetime import timedelta

add = [(1,2),(2,3), (3,4)]
celeryapp = Celery('proj',
        backend='amqp://',
        broker='amqp://',
        include=['proj.tasks'])

celeryapp.conf.update(
        CELERY_TASK_RESULT_EXPIRES=3600,
        CELERY_ROUTES = {
            'proj.tasks.add': {'queue': 'hipri'},
        },
        CELERYBEAT_SCHEDULE = {
            "add": {
                "task": "proj.tasks.add",
                "schedule": timedelta(seconds=20),
                "args": add
            },
        },
        )

if __name__ == '__main__':
    celeryapp.start()

tasks.py

from __future__ import absolute_import
from proj.celeryapp import celeryapp
from celery import group

@celeryapp.task
def add(x, y):
    return x + y

celeryapp.conf.update(

    CELERY_TASK_RESULT_EXPIRES=3600,
    CELERY_ROUTES = {
        'proj.tasks.add': {'queue': 'hipri'},
    },
    CELERYBEAT_SCHEDULE = {
        "add": {
            "task": "proj.tasks.add",
            "schedule": timedelta(seconds=20),
            "args": add[0]
        },
        "add": {
            "task": "proj.tasks.add",
            "schedule": timedelta(seconds=20),
            "args": add[1]
        },
        "add": {
            "task": "proj.tasks.add",
            "schedule": timedelta(seconds=20),
            "args": add[2]
        },
    },
    )
【热门文章】
【热门文章】