Документация Python неофициальный перевод

sched.md

99 строк · 8.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/library/sched.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `sched` – Планировщик событий89**Исходный код:** [Lib/sched.py](https://python-all.ru/src/3.13/Lib/sched.py)1011---1213Модуль `sched` определяет класс, который реализует планировщик событий общего назначения:1415#### `class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)`1617Класс `scheduler` определяет общий интерфейс для планирования событий. Ему нужны две функции для взаимодействия с «внешним миром»: *timefunc* должна быть вызываемой без аргументов и возвращать число («время» в любых единицах). Функция *delayfunc* должна быть вызываемой с одним аргументом, совместимым с выходными данными *timefunc*, и должна задерживать выполнение на это количество единиц времени. *delayfunc* также будет вызвана с аргументом `0` после выполнения каждого события, чтобы предоставить другим потокам возможность выполниться в многопоточных приложениях.1819Изменено в версии 3.3: параметры *timefunc* и *delayfunc* стали необязательными.2021Изменено в версии 3.3: класс `scheduler` можно безопасно использовать в многопоточных средах.2223Пример:2425```python26>>> import sched, time27>>> s = sched.scheduler(time.time, time.sleep)28>>> def print_time(a='default'):29...     print("From print_time", time.time(), a)30...31>>> def print_some_times():32...     print(time.time())33...     s.enter(10, 1, print_time)34...     s.enter(5, 2, print_time, argument=('positional',))35...     # несмотря на более высокий приоритет, 'keyword' выполняется после 'positional', так как enter() является относительным36...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})37...     s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))38...     s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))39...     s.run()40...     print(time.time())41...42>>> print_some_times()431652342830.364037544From print_time 1652342830.3642538 second enterabs45From print_time 1652342830.3643398 first enterabs46From print_time 1652342835.3694863 positional47From print_time 1652342835.3696074 keyword48From print_time 1652342840.369612 default491652342840.369717450```5152## Объекты планировщика5354Экземпляры [`scheduler`](https://python-all.ru/3.13/library/sched.html#sched.scheduler) имеют следующие методы и атрибуты:5556#### `scheduler.enterabs(time, priority, action, argument=(), kwargs={})`5758Планирует новое событие. Аргумент *time* должен быть числового типа, совместимого с возвращаемым значением функции *timefunc*, переданной конструктору. События, запланированные на одно и то же *время*, будут выполняться в порядке их *приоритета*. Меньшее число означает более высокий приоритет.5960Выполнение события означает вызов `action(*argument, **kwargs)`. *argument* – это последовательность позиционных аргументов для *action*. *kwargs* – это словарь именованных аргументов для *action*.6162Возвращаемое значение – это событие, которое может быть использовано для последующей отмены события (см. [`cancel()`](https://python-all.ru/3.13/library/sched.html#sched.scheduler.cancel)).6364Изменено в версии 3.3: параметр *argument* стал необязательным.6566Изменено в версии 3.3: добавлен параметр *kwargs*.6768#### `scheduler.enter(delay, priority, action, argument=(), kwargs={})`6970Планирует событие через *delay* единиц времени. За исключением относительного времени, остальные аргументы, эффект и возвращаемое значение такие же, как и для [`enterabs()`](https://python-all.ru/3.13/library/sched.html#sched.scheduler.enterabs).7172Изменено в версии 3.3: параметр *argument* стал необязательным.7374Изменено в версии 3.3: добавлен параметр *kwargs*.7576#### `scheduler.cancel(event)`7778Удаляет событие из очереди. Если *event* не является событием, находящимся в очереди, этот метод возбуждает исключение [`ValueError`](https://python-all.ru/3.13/library/exceptions.html#ValueError).7980#### `scheduler.empty()`8182Возвращает `True`, если очередь событий пуста.8384#### `scheduler.run(blocking=True)`8586Запускает все запланированные события. Этот метод будет ожидать (используя функцию *delayfunc*, переданную конструктору) следующего события, затем выполнять его и так далее, пока не останется запланированных событий.8788Если *blocking* равен False, немедленно выполняет все события в очереди, значение времени которых меньше или равно текущему значению *timefunc* (если такие есть), и возвращает разницу между текущим значением *timefunc* и временем следующего запланированного события в очереди событий планировщика. Если очередь пуста, возвращает `None`.8990Либо *action*, либо *delayfunc* могут возбуждать исключения. В любом случае планировщик сохранит согласованное состояние и пробросит исключение. Если исключение возбуждено *action*, событие не будет повторно предприниматься при последующих вызовах `run()`.9192Если выполнение последовательности событий занимает больше времени, чем доступно до следующего события, планировщик просто отстанет от графика. Ни одно событие не будет отброшено; вызывающий код отвечает за отмену событий, которые больше не актуальны.9394Изменено в версии 3.3: добавлен параметр *blocking*.9596#### `scheduler.queue`9798Атрибут только для чтения, возвращающий список предстоящих событий в порядке их выполнения. Каждое событие представлено в виде [именованного кортежа](https://python-all.ru/3.13/glossary.html#term-named-tuple) со следующими полями: time, priority, action, argument, kwargs.99