Я надеюсь, что смогу программно генерировать записи celerybeat и повторно синхронизировать celerybeat при добавлении записей. В документах здесь указано
По умолчанию записи берутся из настройки CELERYBEAT_SCHEDULE, но также можно использовать пользовательские хранилища, например, хранить записи в базе данных SQL.
Поэтому я пытаюсь выяснить, какие классы мне нужно расширить, чтобы иметь возможность сделать это.
Я просматривал документацию по планировщику сельдерея и документацию по API djcelery , но документации о том, что делают некоторые из этих методов, не существует, поэтому я собирался погрузиться в какой-то источник и был просто надеясь, что кто-то может указать мне в правильном направлении.
Я думаю, что высокий уровень того, что я делаю, был бы полезен... Как пользователь, я должен иметь возможность выбирать из предопределенного набора задач и предоставлять пользователю возможность выбрать какое-то собственное расписание. для его выполнения, например, каждый день/неделю/месяц и в какой день и время.
Также это есть в Django с djcelery.
ОБНОВЛЕНИЕ
Я вижу код администратора 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: WARNING/Beat] Такт процесса:
[2012-03-06 00:23:07,926: WARNING/Beat] Отслеживание (последний последний вызов):
[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: ПРЕДУПРЕЖДЕНИЕ/Beat] self.run()
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/Beat] Файл "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py" , строка 464, в работе
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/Beat] self.service.start(embedded_process=True)
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/Beat] Файл "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py" , строка 403, в начале
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/такт] interval = self.scheduler.tick()
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/Beat] Файл "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py" , строка 194, в тике
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/Beat] next_time_to_run = self.maybe_due(entry, self.publisher)
[2012-03-06 00:23:07,927: ПРЕДУПРЕЖДЕНИЕ/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 = запись.is_due()
[2012-03-06 00:23:07,928: ПРЕДУПРЕЖДЕНИЕ/Beat] Файл "/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: ПРЕДУПРЕЖДЕНИЕ/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()