如何使用celery beat在Python中安排多个任务?

时间:2019-12-31 06:49:27

标签: python flask celery celerybeat

我有一个功能,我用烧瓶中的芹菜创建了一个任务,该任务每天运行一次。我为相同的功能创建了另外3个任务-这些任务有时在某些时间,每天固定时间运行。我尝试运行所有这些任务,但只运行了我创建的第一个任务(每分钟运行一次)的一天)。 这是我的代码片段: 功能:

@celery.task(name='scheduler',once={'graceful': True})
def scheduler(self):
    #rest of the code

芹菜配置:

from celery import Celery
from celery.schedules import crontab
from celery.utils.log import get_task_logger
app = Flask(__name__)
logger = get_task_logger(__name__)
def make_celery(app):
    #Celery configuration
    app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
    app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
    app.config['CELERYBEAT_SCHEDULE'] = {
        # Executes every minute
        'periodic_task-every-minute': {
            'task': 'scheduler',
            'schedule': crontab(minute="*"),
            'args': (1,2)
        },
        'periodic_task-every-friday':{
            'task': 'scheduler',
            'schedule': crontab(day_of_week='friday',hour=0,minute=10),
            'args': (3,4)
        },
        'periodic_task-every-monday':{
            'task':'scheduled_scheduling',
            'schedule': crontab(day_of_week='monday',hour=20,minute=20),
            'args': (5,6)
        },
        'periodic_task-daily':{
            'task': 'scheduler',
            'schedule': crontab(hour=20,minute=20),
            'args':(7,8)
        }
    }

    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

celery = make_celery(app)

正在运行的任务只是“定期任务每分钟”,而其余的则不会运行。

0 个答案:

没有答案