Spec-Zone.ru › Python 3.14

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',))
...     # despite having higher priority, 'keyword' runs after 'positional' as enter() is relative
...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
...     s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
...     s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
...     s.run()
...     print(time.time())
...
>>> print_some_times()
1652342830.3640375
From print_time 1652342830.3642538 second enterabs
From print_time 1652342830.3643398 first enterabs
From print_time 1652342835.3694863 positional
From print_time 1652342835.3696074 keyword
From print_time 1652342840.369612 default
1652342840.3697174

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

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

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

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

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

scheduler.queue

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

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/sched.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API