如何在芹菜中安排链任务



我想运行一个由节拍安排的复杂任务。让我们假设定义了默认的 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

如何用芹菜节拍安排一项重要的任务?

一种方法

是使用link选项在celeryconfigbeat_schedule安排任务链,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': ()
    }
}

对于添加链式定期任务,您可以在声明链时使用 @app.task,然后在 add_periodic_task(( 方法上添加此新任务。例:

@app.on_after_finalize.connect ->i use this because it`s declared on task.py
def setup_periodic_tasks(sender, **kwargs):                               
   sender.add_periodic_task(timedelta(minutes=10), chian_st22.s(),name='test')
                                
@app.task
def chian_st22(): -> i create the task with chain 
    cadena = chain(st22.s(), mailer.s()).apply_async()
@app.task
def mailer(data):
    clase = CheckAlert()
    mail = clase.envio_mail(data)
    return mail
@app.task
def st22():
    clase = CheckAlert()
    st = clase.check_st22_dumps()
    return st

相关内容

  • 没有找到相关文章

最新更新