Планирование (отменяемые) Django задач в будущем - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть сайт Django, который позволяет пользователям создавать события, которые начнутся в определенное время в определенную дату. Важно также, что они могут изменить дату / время начала события, когда захотят, вплоть до времени, когда оно должно начаться. Когда событие начинается, мне нужно запустить определенную задачу, которая настроит следующее событие.

Идея 1 - APScheduler

Первоначально я думал, что я мог бы использовать APScheduler для этого, но это не масштабируется, потому что APScheduler запускается в том же процессе, что и веб-процесс, поэтому, если я масштабирую его, задача запускается более одного раза.

Идея 2 - сельдерей / редис

Затем я перешел на использование сельдерея (и redis), но проблема в том, что единственный способ отменить событие (например, когда пользователь изменяет время начала события) - пометить его как отозванное в сельдерее. рабочий, в результате чего он не выполняется, когда Redis запускает его. Это было бы хорошо, но мне нужно использовать указанный аргумент b для сельдерея (чтобы обеспечить сохранение списка отозванных задач при перезапуске работника), и я не могу этого сделать, поскольку использую Heroku, а их архитектура - нет разрешить это.

Идея 3 - Долгосрочный планировщик сельдерея

Существует приложение, называемое долговременным планировщиком (https://github.com/ZeitOnline/celery_longterm_scheduler)), которое требует задания cron для регулярного опроса заданий, требующих запуска, но мне это кажется слегка ошибочным, поскольку задача вряд ли будет запускаться в точное время запуска события, которое мне нужно.

Есть еще идеи?

Конечно, есть способ, которым я могу назначить задачи (есть другие задачи, которые должны запускаться время от времени в зависимости от времени начала событий), которые будут выполняться ТОЧНО в указанное время?

Это похоже на что-то, что должно быть довольно распространенным, но я не могу найти хороший способ сделать это.

...