我希望能够以编程方式生成celerybeat条目和resync celerybeat添加条目时。该文档here状态如何以编程方式生成celerybeat条目与芹菜和Django
By default the entries are taken from the CELERYBEAT_SCHEDULE setting, but custom stores can also be used, like storing the entries in an SQL database.
所以我试图找出我需要扩展到能够做到这一点,其类。
我一直在寻找celery scheduler docs和djcelery api docs,但是这些方法中的某些方法的文档是不存在的,所以我们不打算潜入某些源代码,只是希望有人能指出我朝着正确的方向。
我想我做的事情的高层次是有帮助的......作为一个用户,我需要能够从一组预定义的任务中进行选择,并为用户提供一种方法来选择某种自定义计划执行,例如每天/每周/每月以及每天和每个时间。
此外,这是在djcelery与Django。
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')
数据在db正确的,但在后台运行时,它有这个错误:
[2012-03-06 00:23:07,926: WARNING/Beat] Process Beat:
[2012-03-06 00:23:07,926: WARNING/Beat] Traceback (most recent call last):
[2012-03-06 00:23:07,926: WARNING/Beat] File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
[2012-03-06 00:23:07,926: WARNING/Beat] self.run()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 464, in run
[2012-03-06 00:23:07,927: WARNING/Beat] self.service.start(embedded_process=True)
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev /.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 403, in start
[2012-03-06 00:23:07,927: WARNING/Beat] interval = self.scheduler.tick()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 194, in tick
[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] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 170, in maybe_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: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py", line 54, in 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' object has no attribute 'is_due'
我不知道为什么我的时间表不使用默认is_due()
出于某种原因,我不明白我跟随此创建我的计划任务,并不需要包装'ModelEntry'。不知道为什么或什么'ModelEntry'是。随机笔记 - 我也设置了'expires',并感到困惑,它没有效果。它*有*效果,但是'celeryd'不是'celerybeat' - 'celerybeat'继续无限触发,但'expires'后celeryd忽略它(状态'撤销')。 – Chris 2016-04-28 18:52:20
它是与django集成的djcelery的一部分。不知道你是否在使用它。 https://github.com/celery/django-celery 我会怀疑它。看起来不赞成。这是4岁。 – Dustin 2016-04-28 21:12:31
@达斯汀抱歉,没有那么多要求为其他可能会出现的人留下一个便条。您的答案是在Internet上以编程方式为CeleryBeat安排PeriodicTask的最简单示例!其余的使用配置文件或只给出部分答案。 (我正在使用djcelery - 我认为这是数据库后端的来源,而我从djcelery.models import *'。) – Chris 2016-04-29 12:39:10