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, переданной конструктору. События, намеченные для того же 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

Атрибут только для чтения, возвращающие список предстоящих событий в том порядке, в котором они будут выполняться. Каждое событие отображается как именованный кортеж со следующими полями: time, priority, action, argument, kwargs.