sched — Event scheduler

Вихідний код: 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',))
...     # 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()).

Змінено в версії 3.3: Параметр argument необов’язковий.

Змінено в версії 3.3: Додано параметр kwargs.

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

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

Змінено в версії 3.3: Параметр argument необов’язковий.

Змінено в версії 3.3: Додано параметр kwargs.

scheduler.cancel(event)

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

scheduler.empty()

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

scheduler.run(blocking=True)

Run all scheduled events. This method will wait (using the delayfunc function passed to the constructor) for the next event, then execute it and so on until there are no more scheduled events.

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

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

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

Змінено в версії 3.3: Додано параметр блокування.

scheduler.queue

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