在Django中手动运行芹菜计划任务

时间:2017-07-18 22:50:57

标签: python django celery django-celery

在我的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_BEAT_SCHEDULE中定义的计划任务的解释,并从那里手动运行它们?


到目前为止,我发现的最接近的是来自inspect().registered_tasks()的{​​{1}},但这似乎更多地是关于工人而不是预定的任务。

1 个答案:

答案 0 :(得分:0)

我95%确定我错过了一个重要的方面,但我会试一试。

如果你想运行一个特定的异步任务但是自己开始,你能不能只做your_task.delay()吗?

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

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