Я пытаюсь расширить celery.schedules.schedule, чтобы иметь возможность контролировать, должна ли задача выполняться или нет. На самом деле, я хочу добавить два новых аргумента в объект (exclude_from и exclude_to) и предотвратить выполнение задачи между этими часами. Я хочу сделать это вместо использования crontab, потому что мне нужно выполнять задачи каждую минуту в разную секунду, чтобы ограничить заряд.
Я пытался сделать это в функции is_due, но она работает только частично из-за возврат функции, которая должна быть (is_due 'True / False', 'next').
Когда я устанавливаю значение 60 se c, кажется, что сельдерей никогда больше не проверяет.
Ты знаешь почему ? Это хорошее место, чтобы предотвратить выполнение задачи?
Спасибо за вашу помощь.
Например:
schedstate = namedtuple('schedstate', ('is_due', 'next'))
hour = datetime.now().hour
# now().hour must be oustide exclude_to and exclude_from else we prevent the execution
if self.exclude_to > self.exclude_from:
# In a case like exclude from 19h to 21h
# we have to check exclude_from <= now().hour < exclude_to
if self.exclude_from <= hour and hour < self.exclude_to:
# raise Exception(schedstate(is_due=False, next=self.seconds))
last_run_at = self.maybe_make_aware(last_run_at)
rem_delta = self.remaining_estimate(last_run_at)
remaining_s = max(rem_delta.total_seconds(), 0)
return schedstate(is_due=False, next=remaing_s) # or next=60 does not work either
Луисон