【发布时间】:2017-03-15 06:47:30
【问题描述】:
我有一个 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),
},
}
我该如何解决这个问题,或者 celery 是否可以在不同的时间间隔安排多个相同类型的任务并通过用户界面(通过 AJAX)更改值?
【问题讨论】:
-
使用
django-celery,您可以使用djcelery.schedulers.DatabaseScheduler,它允许您在django admin 中管理您的周期性任务。 celery docs -
哇
changing the frequency of data collection太酷了。我将在github.com/rajasimon/beatserver 中编写功能 -
@devxplorer 我正在尝试
django-celery-beat,它似乎正在取代django-celery(如果不是这种情况,请告诉我)。我现在面临的问题是,当我添加新的 PeriodicTasks 时,它们不会执行,直到我重新启动节拍过程 (celery -A proj beat -l info -S django)。 -
一切都应该工作而无需重新启动。但是如果批量更新周期性任务,则需要手动更新计数器:
PeriodicTasks.changed(),来自docs
标签: django celery django-celery celery-task celerybeat