我希望能够以编程方式生成 celerybeat 条目并在添加条目时重新同步 celerybeat。这里的文档状态
默认情况下,条目取自 CELERYBEAT_SCHEDULE 设置,但也可以使用自定义存储,例如将条目存储在 SQL 数据库中。
所以我想弄清楚我需要扩展哪些类才能做到这一点。
我一直在查看celery scheduler docs和djcelery api docs但是关于其中一些方法的作用的文档是不存在的,因此将深入研究一些来源,只是希望有人能指出我正确的方向。
我想我正在做的高水平工作会有所帮助......作为用户,我需要能够从一组预定义的任务中进行选择,并为用户提供一种选择某种自定义计划的方法执行,例如每天/每周/每月以及什么日期和时间。
这也是在带有 djcelery 的 Django 中。
更新
我看到了 djcelery 管理员的代码,但不清楚这些数据是如何被持久化的。我目前有一个addTask
看起来像这样的通用视图:
def addTask(request):
intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10)))
intervalSchedule.save()
modelData = dict(
name="dcTestPersist",
task="technologytrackerapi.views.createRecord",
schedule=intervalSchedule,
)
periodicTask = PeriodicTask(**modelData)
periodicTask.save()
return render_to_response('taskView.html')
数据库中的数据看起来是正确的,但是当守护程序运行时,它会出现以下错误:
[2012-03-06 00:23:07,926:警告/节拍] 过程节拍:
[2012-03-06 00:23:07,926:警告/节拍] 回溯(最后一次通话):
[2012-03-06 00 :23:07,926: WARNING/Beat] 文件“/usr/lib/python2.7/multiprocessing/process.py”,第 258 行,在 _bootstrap
[2012-03-06 00:23:07,926: WARNING/Beat] self.运行()
[2012-03-06 00:23:07,927:警告/节拍]文件“/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat .py",第 464 行,运行中
[2012-03-06 00:23:07,927:警告/节拍] self.service.start(embedded_process=True)
[2012-03-06 00:23:07,927:警告/节拍] 文件“/home/dchesterman/Documents/PythonDev /.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py”,第 403 行,开始
[2012-03-06 00:23:07,927:警告/节拍] 间隔 = self.scheduler.tick()
[2012-03-06 00:23:07,927:警告/节拍] 文件“/home/dchesterman/Documents/ PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py",第 194 行,在刻度
[2012-03-06 00:23:07,927: WARNING/Beat] next_time_to_run = self .maybe_due(entry, self.publisher)
[2012-03-06 00:23:07,927: WARNING/Beat] 文件“/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site -packages/celery/beat.py",第 170 行,在 may_due
[2012-03-06 00:23:07,927: WARNING/Beat] is_due, next_time_to_run = entry.is_due()
[2012-03-06 00:23:07,928:警告/节拍] 文件“/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py” ,第 54 行,在 is_due
[2012-03-06 00:23:07,928: WARNING/Beat] return self.schedule.is_due(self.last_run_at)
[2012-03-06 00:23:07,928: WARNING/Beat] AttributeError : 'NoneType' 对象没有属性 'is_due'
我不确定为什么我的日程安排不使用默认设置is_due()