Чего я пытаюсь достичь. Напишите планировщик, который использует базу данных для планирования аналогичных задач в разное время.
Так же, как я использую сельдерей, приведенный ниже фрагмент кода даст представление
try:
reader = MongoReader()
except:
raise
try:
tasks = reader.get_scheduled_tasks()
except:
raise
celerybeat_schedule = dict()
for task in tasks:
celerybeat_schedule[task["task_id"]] =dict()
celerybeat_schedule[task["task_id"]]["task"] = task["task_name"]
celerybeat_schedule[task["task_id"]]["args"] = (task,)
celerybeat_schedule[task["task_id"]]["schedule"] = get_task_schedule(task)
app.conf.update(BROKER_URL=rabbit_mq_endpoint, CELERY_TASK_SERIALIZER='json', CELERY_ACCEPT_CONTENT=['json'], CELERYBEAT_SCHEDULE=celerybeat_schedule)
Итак, это три шага - чтение всех задач из хранилища данных - создание словаря, планировщик сельдерея, который заполняется всеми задачами, имеющими свойства, имя_задачи (метод, который будет запускаться), параметры (данные для передачи методу), расписание (сохраняет, когда run) - обновление с помощью конфигураций сельдерея
Ожидаемый сценарий, учитывая, что все записи запускают одно и то же имя задачи сельдерея, которое просто печатает, имеют одно и то же расписание, которое запускается каждые 5 минут, с разными параметрами, указывающими, что печатать, скажем, у db есть
task name , parameter , schedule
regular_print , Hi , {"minutes" : 5}
regular_print , Hello , {"minutes" : 5}
regular_print , Bye , {"minutes" : 5}
Я ожидаю, что они будут печататься каждые 5 минут, чтобы напечатать все три
Что происходит Только одна из распечаток Hi, Hello, Bye (возможно, случайно, но не последовательно)
Пожалуйста, помогите, заранее большое спасибо :)