【问题标题】:Manually running celery scheduled tasks within Django在 Django 中手动运行 celery 计划任务
【发布时间】:2017-07-18 22:50:56
【问题描述】:

在我的 Django 设置文件中,我的内容如下所示:

CELERY_BEAT_SCHEDULE = {
    'my_task': {
        'task': 'tasks.my_task',
        'schedule': crontab(hour=4, minute=0),
        'kwargs': {'interval': 'hour', 'features': [], 'max_samples': 200,
                   'training_days': 90, 'force_update': False},
        'options': {'queue': 'my_queue'},
    },
}

我想做的是能够手动异步启动此任务。我知道的一种方法是:

task = settings.CELERY_BEAT_SCHEDULE['my_task']
tasks.my_task.apply_async(kwargs=task['kwargs'], queue=task['options']['queue'])

虽然这可行,但我的口味有点笨拙,我正在寻找更好的方法。

有没有办法找到 celery 对 CELERY_BEAT_SCHEDULE 中定义的计划任务的解释并从那里手动运行它们?


到目前为止,我发现的最接近的是 inspect().registered_tasks()celery.task.control,但这似乎更多地是关于工作人员而不是计划任务。

【问题讨论】:

    标签: python django celery django-celery


    【解决方案1】:

    我有 95% 的把握我错过了这方面的一个重要方面,但我会试一试。

    如果您想异步运行特定任务但自己启动它,您可以不只做your_task.delay()吗?

    如果您想手动运行所有计划任务,只需从django.conf.settings 解析CELERY_BEAT_SCHEDULE,导入每个任务并在其上运行.delay()

    编辑: 你似乎在你的例子中做了类似的事情。你能说出你为什么不喜欢这个解决方案吗?

    【讨论】:

      最近更新 更多