如何在芹菜中安排连锁任务

时间:2019-06-05 12:29:53

标签: celery schedule chain

我想执行按节拍安排的复杂任务。让我们假设定义了默认的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 :(得分:0)

一种执行此操作的方法是使用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': ()
    }
}
相关问题