Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Celery beat schedule multiple tasks under same time-interval group

I'm trying to set up two tasks that both run every minute. Is there any way to group them in one to run?

I specified CELERYBEAT_SCHEDULE in my celeryconfig.py as following:

CELERYBEAT_SCHEDULE = {
    'every-minute': {
        'task': 'tasks.add',
        'schedule': crontab(minute='*/1'),
        'args': (1,2)
    },
}

So if I want to run two tasks, I would expect something like this?

CELERYBEAT_SCHEDULE = {
    'every-minute': {
        'task': ['tasks.add','task.multiply'],
        'schedule': [crontab(minute='*/1'),crontab(minute='*/1')],
        'args': [(1,2),(3,4)]
    },
}

However it did not work. Is there any standard way of doing this?

like image 545
xbb Avatar asked Mar 17 '14 22:03

xbb


1 Answers

The Celery Documentation: Periodic Tasks states that you can only have the name of the task to be executed (not a list, etc.)

You could create two different schedule entries:

CELERYBEAT_SCHEDULE = {
    'every-minute_add': {
        'task': 'tasks.add',
        'schedule': crontab(minute='*/1'),
        'args': (1,2)
    },
    'every-minute_multiply': {
        'task': 'task.multiply',
        'schedule': crontab(minute='*/1'),
        'args': (3,4)
    },
}
like image 159
Hassan Avatar answered Nov 16 '22 10:11

Hassan