使用芹菜作为不规则间隔的调度程序?

时间:2016-11-02 02:55:16

标签: django celery django-celery celery-task celerybeat

我有一个django应用程序,允许用户创建多个不同的博客。每个博客需要每小时/每日/每周等收集模型数据(例如,访问次数,点击次数等),并且博客之间收集数据的间隔可能不同。另外,在某个时间点,用户可能想要改变数据收集的频率,例如,在用户界面上从每周到每天。

从官方文档中查看Periodic Tasks,似乎我必须硬编码'设置文件中的间隔值,我只能指定一次间隔,例如。

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
        'args': (16, 16),
    },
}

我如何解决这个问题,或者甚至可以让芹菜以不同的时间间隔安排同一类型的多个任务并通过用户界面(通过AJAX)更改值?

1 个答案:

答案 0 :(得分:0)

正如@devxplorer所述,django-celery提供了一个数据库后端。您可以使用它来通过Django管理员以编程方式管理任务,或通过API公开模型。

from djcelery.models import PeriodicTask

PeriodicTask(
    name="My First Task",
    ...
).create()
all_tasks = PeriodicTask.objects.all()
...

然后用

开始节拍过程
$ celery -A proj beat -S djcelery.schedulers.DatabaseScheduler