Содержание страницы
17.6. sched – Планировщик событий¶sched – Event scheduler
Исходный код: Lib/sched.py
Модуль sched определяет класс, который реализует планировщик событий общего назначения:
-
class
sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)¶ Класс
schedulerопределяет общий интерфейс для планирования событий. Для взаимодействия с «внешним миром» ему требуется две функции: timefunc должна быть вызываемой без аргументов и возвращать число («время» в любых единицах). Если time.monotonic недоступен, по умолчанию timefunc используется time.time. Функция 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',))
... s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
... s.run()
... print(time.time())
...
>>> print_some_times()
930343690.257
From print_time 930343695.274 positional
From print_time 930343695.275 keyword
From print_time 930343700.273 default
930343700.276
17.6.1. Объекты планировщика¶Scheduler Objects
Экземпляры scheduler имеют следующие методы и атрибуты:
-
scheduler.enterabs(time, priority, action, argument=(), kwargs={})¶ Планирует новое событие. Аргумент time должен быть числового типа, совместимого с возвращаемым значением функции timefunc, переданной конструктору. События, запланированные на одно и то же время, будут выполняться в порядке их приоритета. Меньшее число означает более высокий приоритет.
Выполнение события означает вызов
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.