如何用celery和Django以编程方式生成celerybeat条目

Dus*_*tin 11 django celery django-celery celerybeat

我希望能够以编程方式生成celerybeat条目并在添加条目时重新同步celerybeat.这里的文档陈述

默认情况下,条目取自CELERYBEAT_SCHEDULE设置,但也可以使用自定义存储,例如将条目存储在SQL数据库中.

所以我想弄清楚我需要扩展哪些类才能做到这一点.

我一直在研究芹菜调度程序文档djcelery api文档,但是关于这些方法中的一些方法所做的文档是不存在的,所以即将潜入某些来源并且只是希望有人可以指出我正确的方向.

我想我正在做的高水平会有所帮助......作为一个用户,我需要能够从一组预定义的任务中进行选择,并为用户提供一种方法来为其选择某种自定义时间表.执行,像每天/每周/每月,什么日期和时间.

这也是Django与djcelery.

UPDATE

我看到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')
Run Code Online (Sandbox Code Playgroud)

数据在db中看起来是正确的但是当守护进程运行时它有以下错误:

[2012-03-06 00:23:07,926:警告/节拍]流程节拍:
[2012-03-06 00:23:07,926:警告/节拍]追溯(最近一次通话):
[2012-03-06 00 :23:07,926:警告/节拍]文件"/usr/lib/python2.7/multiprocessing/process.py",第258行,在_bootstrap中
[2012-03-06 00:23:07,926:警告/节拍]自我.运行()
[2012-03-06 00:23:07927:警告/节拍]文件"/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 :07927:警告/节拍]间隔= self.scheduler.tick()
[2012-03-06 00:23:07927:警告/节拍]文件"/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/ lib/python2.7/site-packages/celery/beat.py",第194行,勾选
[2012-03-06 00:23:07,927:警告/是 在] next_time_to_run = self.maybe_due(条目,self.publisher)
[2012-03-06 00:23:07927:警告/节拍]文件"/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/ python2.7 /站点包/芹菜/ beat.py",线路170,在maybe_due
[2012-03-06 00:23:07927:警告/节拍] is_due,next_time_to_run = entry.is_due()
[2012-03- 06 00:23:07928:警告/拍子]文件"/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py",第54行,在is_due
[2012-03-06 00:23:07928:警告/节拍]返回self.schedule.is_due(self.last_run_at)
[2012-03-06 00:23:07928:警告/拍子] AttributeError的: 'NoneType'对象没有属性'is_due'

我不确定为什么我的日程表没有使用默认值 is_due()

Dus*_*tin 6

这最终为我工作:

def addTask(request):

  intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10)))
  intervalSchedule.save()

  modelData = dict(
      name="dcTestPersist",
      task="technologytrackerapi.tasks.createRecord",
      interval_id=intervalSchedule.pk,
  )

  periodicTask = PeriodicTask(**modelData)
  periodicTask.save()

  me = ModelEntry(periodicTask)

  try:
      me.save()

  except:
    from django.db import connection
    print connection.queries
    raise

  return render_to_response('taskView.html')
Run Code Online (Sandbox Code Playgroud)

我不得不在ModelEntry中包装Periodic Task.