Как запланировать цепное задание в сельдерее - PullRequest
1 голос
/ 05 июня 2019

Я хочу запустить сложное задание по расписанию. Давайте предположим, что заданные по умолчанию задачи add / mul определены.

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(
        crontab(),
        add.s(2,3) | mul.s(2)
    )

Но это вернет ошибку в работнике:

NotImplementedError: chain is not a real task

Как мне запланировать нетривиальное задание с ритмом сельдерея?

1 Ответ

0 голосов
/ 06 июня 2019

Один из способов сделать это - запланировать цепочку ваших задач в beat_schedule в вашем celeryconfig, используя опцию link, celery_tasks вот имя модуля, в котором определены ваши задачи

from celery.schedules import crontab
from celery import signature

beat_schedule = {
    'chained': {
        'task': 'celery_tasks.add',
        'schedule': crontab(),
        'options': {
            'queue': 'default',
            'link': signature('celery_tasks.mul',
                        args=(),
                        kwargs={},
                        options={
                            'link': signature('celery_tasks.another_task', 
                                args=(),
                                kwargs={}, 
                                queue='default')
                        },
                        queue='default')
            },
         'args': ()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...