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, передаваемой конструктору. События, запланированные на одно и то же время, будут выполняться в порядке их приоритета. Меньшее число соответствует более высокому приоритету.
Выполнение события означает выполнение
action(*argument, **kwargs)
. argument - это последовательность, содержащая позиционные аргументы для action. kwargs - это словарь, содержащий ключевые слова arguments для action.Возвращаемое значение - это событие, которое может быть использовано для последующей отмены события (см.
cancel()
).Изменено в версии 3.3: аргумент параметр является необязательным.
Изменено в версии 3.3: был добавлен параметр kwargs.
- scheduler.enter(delay, priority, action, argument=(), kwargs={})¶
Запланируйте событие на задержку большего количества единиц времени. Кроме относительного времени, остальные аргументы, эффект и возвращаемое значение такие же, как и для
enterabs()
.Изменено в версии 3.3: аргумент параметр является необязательным.
Изменено в версии 3.3: был добавлен параметр kwargs.
- scheduler.cancel(event)¶
Удалите событие из очереди. Если event не является событием, находящимся в данный момент в очереди, этот метод вызовет
ValueError
.
- scheduler.empty()¶
Верните
True
, если очередь событий пуста.
- scheduler.run(blocking=True)¶
Запускать все запланированные события. Этот метод будет ожидать (используя функцию delayfunc, переданную конструктору) следующего события, затем выполнять его и так далее, пока запланированных событий больше не будет.
Если значение blocking равно false, выполняет запланированные события, срок действия которых истекает как можно скорее (если таковые имеются), а затем возвращает крайний срок следующего запланированного вызова в планировщике (если таковой имеется).
Исключение может быть вызвано либо action, либо delayfunc. В любом случае планировщик будет поддерживать согласованное состояние и распространять исключение. Если action вызывает исключение, то при будущих вызовах
run()
это событие не будет повторяться.Если выполнение последовательности событий занимает больше времени, чем время, доступное до следующего события, планировщик просто перестанет работать. Никакие события не будут отброшены; вызывающий код отвечает за отмену событий, которые больше не имеют отношения к делу.
Изменено в версии 3.3: был добавлен параметр блокировка.
- scheduler.queue¶
Доступный только для чтения атрибут, возвращающий список предстоящих событий в порядке их запуска. Каждое событие отображается как named tuple со следующими полями: время, приоритет, действие, аргумент, kwargs.