gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:17:39 24 4
gpt4 key购买 nike

我希望能够以编程方式生成 celerybeat 条目并在添加条目时重新同步 celerybeat。文档 here状态

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 docsdjcelery api docs但是关于这些方法中的一些方法的文档并不存在,所以要深入研究一些来源,只是希望有人能指出我正确的方向。

我想我正在做的高级别的事情会有所帮助......作为用户,我需要能够从一组预定义的任务中进行选择,并为用户提供一种选择某种自定义计划的方法执行,例如每天/每周/每月以及什么日期和时间。

这也是在 Django 中使用 djcelery。

更新

我看到了 djcelery 管理员的代码,但不清楚这些数据是如何保存的。我目前有一个通用的 addTask看起来像这样的 View :
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: 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()

最佳答案

这就是最终为我工作的原因:

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')

我不得不将周期性任务包装在一个 ModelEntry 中。

关于django - 如何使用 celery 和 Django 以编程方式生成 celerybeat 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com