Документация Python неофициальный перевод
Содержание страницы

17.6. sched – Планировщик событийsched – Event scheduler

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


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

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

Класс scheduler определяет универсальный интерфейс для планирования событий. Для взаимодействия с «внешним миром» ему нужны две функции: timefunc должна быть вызываема без аргументов и возвращать число («время» в любых единицах измерения). Если time.monotonic недоступен, по умолчанию timefunc используется time.time. Функция 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

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

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

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

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

Выполнение события означает вызов 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 равен false, выполняет запланированные события, срок которых истекает раньше всего (если они есть), а затем возвращает крайний срок следующего запланированного вызова в планировщике (если он есть).

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

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

Новое в версии 3.3: blocking добавлен параметр.

scheduler.queue

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