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',))
... 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
Объекты планировщика¶
Экземпляры scheduler
имеют следующие методы и атрибуты:
-
scheduler.
enterabs
(time, priority, action, argument=(), kwargs={})¶ Запланировать новое событие. Аргумент time должен быть числовым типом, совместимым с возвращаемым значением функции timefunc, переданной в конструктор. События, запланированные на одно и то же время, будут выполняться в порядке их приоритета. Меньшее число означает более высокий приоритет.
Выполнение события означает выполнение
action(*argument, **kwargs)
. argument - это последовательность, содержащая позиционные аргументы для действия. kwargs - это словарь, содержащий аргументы ключевых слов для действия.Возвращаемое значение - событие, которое может быть использовано для последующей отмены события (см.
cancel()
).Изменено в версии 3.3: Параметр argument является необязательным.
Изменено в версии 3.3: Был добавлен параметр kwargs.
-
scheduler.
enter
(delay, priority, action, argument=(), kwargs={})¶ Запланировать событие на задержку больше единиц времени. Кроме относительного времени, другие аргументы, эффект и возвращаемое значение те же, что и для
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
¶ Атрибут только для чтения, возвращающий список предстоящих событий в том порядке, в котором они будут выполняться. Каждое событие отображается в виде named tuple со следующими полями: время, приоритет, действие, аргумент, kwargs.