Spec-Zone.ru › Python 3.12

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

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

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

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

scheduler.queue

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

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

Spec-Zone.ru

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