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.monotonic, 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 ложно, выполняет запланированные события, срок которых настал в ближайшее время (если таковые есть), и возвращает крайний срок следующего запланированного вызова в планировщике (если таковой есть).
Исключение может быть вызвано либо функцией action, либо функцией delayfunc. В любом случае планировщик сохранит согласованное состояние и распространит исключение. Если исключение вызвано функцией action, событие не будет выполнено в будущих вызовах
run().Если последовательность событий занимает больше времени, чем доступно до следующего события, планировщик просто отстанет. События не будут потеряны; код вызывающей программы отвечает за отмену событий, которые больше не актуальны.
Изменено в версии 3.3: Добавлен параметр blocking.
-
scheduler.queue -
Только для чтения атрибут, возвращающий список будущих событий в порядке их выполнения. Каждое событие представлено в виде кортежа с именами со следующими полями: время, приоритет, действие, аргумент, kwargs.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/sched.html