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–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/sched.html