Документация 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.