sched — Планировщик событий

Исходный код: Lib/sched.py


Модуль sched определяет класс, реализующий планировщик событий общего назначения:

class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)

Класс scheduler определяет общий интерфейс для планирования событий. Для работы с «внешним миром» нужны две функции. timefunc должна быть вызвана без аргументов и возвращать число («время» в любых единицах измерения). Функция delayfunc должна быть вызвана с одним аргументом, совместимым с выводом timefunc, и должна задерживать это количество единиц времени. delayfunc также будет вызываться с аргументом 0 после запуска каждого события, чтобы дать другим потокам возможность работать в многопоточных приложениях.

Изменено в версии 3.3: Параметры timefunc и delayfunc необязательны.

Изменено в версии 3.3: Класс scheduler можно безопасно использовать в многопоточных средах.

Пример:

>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
...     print("From print_time", time.time(), a)
...
>>> def print_some_times():
...     print(time.time())
...     s.enter(10, 1, print_time)
...     s.enter(5, 2, print_time, argument=('positional',))
...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
...     s.run()
...     print(time.time())
...
>>> print_some_times()
930343690.257
From print_time 930343695.274 positional
From print_time 930343695.275 keyword
From print_time 930343700.273 default
930343700.276

Объекты планировщика

У экземпляров scheduler следующие методы и атрибуты:

scheduler.enterabs(time, priority, action, argument=(), kwargs={})

Запланировать новое событие. Аргумент time должен быть числового типа, совместимого с возвращаемым значением функции timefunc, переданной конструктору. События, запланированные для того же time, будут выполняться в порядке их priority. Меньшее число означает более высокий приоритет.

Выполнение события означает выполнение action(*argument, **kwargs). argument — это последовательность, содержащая позиционные аргументы для action. kwargs — это словарь, содержащие ключевые аргументы для action.

Возвращаемое значение — это событие, которое можно использовать для последующей отмены события (см. cancel()).

Изменено в версии 3.3: Параметр argument не является обязательным.

Изменено в версии 3.3: Добавлен параметр kwargs.

scheduler.enter(delay, priority, action, argument=(), kwargs={})

Запланировать событие для delay дополнительных единиц времени. За исключением относительного времени, другие аргументы, эффект и возвращаемое значение такие же, как для enterabs().

Изменено в версии 3.3: Параметр argument не является обязательным.

Изменено в версии 3.3: Добавлен параметр kwargs.

scheduler.cancel(event)

Удалить событие из очереди. Если event не является событием в очереди, этот метод вызовет ValueError.

scheduler.empty()

Возвращает True, если очередь событий пуста.

scheduler.run(blocking=True)

Запустить все запланированные события. Этот метод будет ждать (используя функцию delayfunc(), переданную конструктору) следующего события, затем выполнит его и так далее, пока не исчезнут запланированные события.

Если у blocking значение ложь, выполняет запланированные события, истекающие раньше всех (если они есть), а затем возвращает крайний срок следующего запланированного вызова в планировщике (если есть).

Либо action, либо delayfunc могут вызвать исключение. В любом случае планировщик будет поддерживать согласованное состояние и распространять исключение. Если исключение вызвано action, событие не будет предприниматься в будущих вызовах run().

Если для выполнения последовательности событий требуется больше времени, чем время, доступное до следующего события, планировщик просто отстанет. Никакие события не будут сброшены; вызывающий код отвечает за отмену событий, которые больше не актуальны.

Изменено в версии 3.3: Добавлен параметр blocking.

scheduler.queue

Атрибут только для чтения, возвращающий список предстоящих событий в порядке их запуска. Каждое событие отображается как именованный кортеж со следующими полями: time, priority, action, argument, kwargs.