【问题标题】:Celery, Dynamically adding periodic taskCelery,动态添加周期性任务
【发布时间】:2019-12-11 14:16:13
【问题描述】:

https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#entries 提到add_periodic_task

我不知道test.s and test.s('hello') 是什么,而不仅仅是test('hello')

from celery import Celery
from celery.schedules import crontab

app = Celery()

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Calls test('hello') every 10 seconds.
    sender.add_periodic_task(10.0, test.s('hello'), name='add every 10')

    # Calls test('world') every 30 seconds
    sender.add_periodic_task(30.0, test.s('world'), expires=10)

    # Executes every Monday morning at 7:30 a.m.
    sender.add_periodic_task(
        crontab(hour=7, minute=30, day_of_week=1),
        test.s('Happy Mondays!'),
    )

@app.task
def test(arg):
    print(arg)

sender 是什么?我想在@app.on_after_configure.connect之外给add_periodic_task打电话

【问题讨论】:

    标签: celery


    【解决方案1】:

    .s() 是任务签名 - 将其视为运行任务的占位符 - test('hello') 将立即调用您的任务,当您只想指示 Celery 定期调用任务时,这不是您想要的setup_periodic_tasks.

    【讨论】:

    • 嗯,有道理,我又给OP加了一个问题,你也看一下吗?