sched — Планировщик событий
Исходный код: Lib/sched.py
Модуль sched определяет класс, реализующий универсальный планировщик событий:
-
class sched.scheduler(timefunc, delayfunc) -
Класс
schedulerопределяет общий интерфейс для планирования событий. Для взаимодействия с «внешним миром» ему нужны две функции — timefunc должна вызываться без аргументов и возвращать число (время в любых единицах). Функция delayfunc должна вызываться с одним аргументом, совместимым с результатом timefunc, и должна приостанавливать выполнение на соответствующее количество единиц времени. delayfunc также будет вызываться с аргументом0после выполнения каждого события, чтобы предоставить возможность другим потокам выполняться в многопоточных приложениях.
Пример:
>>> import sched, time >>> s = sched.scheduler(time.time, time.sleep) >>> def print_time(): print "From print_time", time.time() ... >>> def print_some_times(): ... print time.time() ... s.enter(5, 1, print_time, ()) ... s.enter(10, 1, print_time, ()) ... s.run() ... print time.time() ... >>> print_some_times() 930343690.257 From print_time 930343695.274 From print_time 930343700.273 930343700.276
В многопоточных средах класс scheduler имеет ограничения в отношении потокобезопасности, невозможности вставки новой задачи перед текущей, ожидающей выполнения в работающем планировщике, и блокирования главного потока до тех пор, пока очередь событий не станет пустой. Вместо этого предпочтительнее использовать класс threading.Timer.
Пример:
>>> import time >>> from threading import Timer >>> def print_time(): ... print "From print_time", time.time() ... >>> def print_some_times(): ... print time.time() ... Timer(5, print_time, ()).start() ... Timer(10, print_time, ()).start() ... time.sleep(11) # sleep while time-delay events execute ... print time.time() ... >>> print_some_times() 930343690.257 From print_time 930343695.274 From print_time 930343700.273 930343701.301
1. Объекты планировщика
scheduler экземпляры имеют следующие методы и атрибуты:
-
scheduler.enterabs(time, priority, action, argument) -
Планирует новое событие. Аргумент time должен быть числового типа, совместимого с возвращаемым значением функции timefunc, переданной в конструктор. События, запланированные на одно и то же time, будут выполняться в порядке их priority. Меньшее число соответствует более высокому приоритету.
Выполнение события означает выполнение
action(*argument). argument должен быть последовательностью, содержащей параметры для action.Возвращаемое значение — это событие, которое может быть использовано для последующей отмены события (см.
cancel()).
-
scheduler.enter(delay, priority, action, argument) -
Планирует событие на delay единиц времени позже. За исключением относительного времени, другие аргументы, эффект и возвращаемое значение такие же, как у
enterabs().
-
scheduler.cancel(event) -
Удаляет событие из очереди. Если event не является событием, в настоящее время находящимся в очереди, этот метод вызовет
ValueError.
-
scheduler.empty() -
Возвращает True, если очередь событий пуста.
-
scheduler.run() -
Выполняет все запланированные события. Эта функция будет ожидать (используя функцию
delayfunc(), переданную в конструктор), следующего события, затем выполнять его и так далее до тех пор, пока не останется запланированных событий.Исключение может быть вызвано либо action, либо delayfunc. В любом случае планировщик будет поддерживать согласованное состояние и распространять исключение. Если исключение вызывается action, событие не будет предпринято при последующих вызовах
run().Если последовательность событий занимает больше времени, чем доступно до следующего события, планировщик просто отстанет. События не будут пропускаться; вызывающий код отвечает за отмену событий, которые больше не актуальны.
-
scheduler.queue -
Только для чтения атрибут, возвращающий список будущих событий в порядке их выполнения. Каждое событие показано как named tuple со следующими полями: время, приоритет, действие, аргумент.
Введено в версии 2.6.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/sched.html