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 з такими полями: час, пріоритет, дія, аргумент, кварги.