Расширить celery.schedules.schedule для контроля выполнения задач - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь расширить 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

Луисон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...