sched — Планировщик событий

Kod źródłowy: Lib/sched.py


Модуль sched визначає клас, який реалізує планувальник подій загального призначення:

class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)

Клас scheduler визначає загальний інтерфейс для планування подій. Йому потрібні дві функції, щоб мати справу із „зовнішнім світом” — timefunc має бути викликаною без аргументів і повертати число („час” у будь-яких одиницях). Функція delayfunc має бути викликана за допомогою одного аргументу, сумісна з виводом timefunc, і має затримувати стільки одиниць часу. delayfunc також буде викликано з аргументом 0 після запуску кожної події, щоб надати іншим потокам можливість працювати в багатопоточних програмах.

Zmienione w wersji 3.3: Параметри timefunc і delayfunc є необов’язковими.

Zmienione w wersji 3.3: Клас scheduler можна безпечно використовувати в багатопоточних середовищах.

Przykład:

>>> 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). Аргумент — це послідовність, що містить позиційні аргументи для дії. kwargs — це словник, що містить ключові аргументи для action.

Повернене значення — це подія, яка може бути використана для подальшого скасування події (див. cancel()).

Zmienione w wersji 3.3: Параметр argument необов’язковий.

Zmienione w wersji 3.3: Додано параметр kwargs.

scheduler.enter(delay, priority, action, argument=(), kwargs={})

Заплануйте подію на затримку більше одиниць часу. Крім відносного часу, інші аргументи, ефект і значення, що повертається, такі самі, як і для enterabs().

Zmienione w wersji 3.3: Параметр argument необов’язковий.

Zmienione w wersji 3.3: Додано параметр kwargs.

scheduler.cancel(event)

Видалити подію з черги. Якщо подія не є подією, яка зараз знаходиться в черзі, цей метод викличе ValueError.

scheduler.empty()

Повертає True, якщо черга подій порожня.

scheduler.run(blocking=True)

Запуск всех запланированных событий. Этот метод будет ждать (используя функцию delayfunc, переданную конструктору) следующего события, затем выполнять его и так далее, пока не закончатся запланированные события.

Якщо блокування має значення false, виконує заплановані події, які мають закінчитися якнайшвидше (якщо є), а потім повертає крайній термін наступного запланованого виклику в планувальнику (якщо є).

Або action, або delayfunc можуть викликати виняток. У будь-якому випадку планувальник підтримуватиме узгоджений стан і поширюватиме виняткову ситуацію. Якщо action викликає виключення, подія не буде спробована в майбутніх викликах run().

Якщо для виконання послідовності подій потрібно більше часу, ніж доступний час до наступної події, планувальник просто відстає. Жодна подія не буде видалена; код виклику відповідає за скасування подій, які більше не актуальні.

Zmienione w wersji 3.3: Додано параметр блокування.

scheduler.queue

Атрибут лише для читання, який повертає список майбутніх подій у порядку їх виконання. Кожна подія відображається як named tuple з такими полями: час, пріоритет, дія, аргумент, кварги.