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

sched.md

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

1> **Источник:** https://python-all.ru/3.3/library/sched.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 17.6. [`sched`](https://python-all.ru/3.3/library/sched.html#module-sched) – Планировщик событий89**Исходный код:** [Lib/sched.py](https://python-all.ru/src/3.3/Lib/sched.py)1011---1213Модуль [`sched`](https://python-all.ru/3.3/library/sched.html#module-sched) определяет класс, реализующий планировщик событий общего назначения:1415#### `class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)`1617Класс [`scheduler`](https://python-all.ru/3.3/library/sched.html#sched.scheduler) определяет универсальный интерфейс для планирования событий. Для взаимодействия с «внешним миром» ему нужны две функции: *timefunc* должна быть вызываема без аргументов и возвращать число («время» в любых единицах измерения). Если time.monotonic недоступен, по умолчанию *timefunc* используется time.time. Функция *delayfunc* должна вызываться с одним аргументом, совместимым с выводом *timefunc*, и задерживать выполнение на это же количество единиц времени. *delayfunc* также вызывается с аргументом `0` после каждого выполненного события, чтобы дать другим потокам возможность выполняться в многопоточных приложениях.1819Изменено в версии 3.3: параметры *timefunc* и *delayfunc* стали необязательными.2021Изменено в версии 3.3: [`scheduler`](https://python-all.ru/3.3/library/sched.html#sched.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...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})36...     s.run()37...     print(time.time())38...39>>> print_some_times()40930343690.25741From print_time 930343695.274 positional42From print_time 930343695.275 keyword43From print_time 930343700.273 default44930343700.27645```4647## 17.6.1. Объекты планировщика4849Экземпляры [`scheduler`](https://python-all.ru/3.3/library/sched.html#sched.scheduler) имеют следующие методы и атрибуты:5051#### `scheduler.enterabs(time, priority, action, argument=(), kwargs={})`5253Планирует новое событие. Аргумент *время* должен быть числового типа, совместимого с возвращаемым значением функции *timefunc*, переданной конструктору. События, запланированные на одно и то же *время*, будут выполнены в порядке их *приоритета*.5455Выполнение события означает вызов `action(*argument, **kwargs)`. *argument* – это последовательность, содержащая позиционные аргументы для *action*. *kwargs* – это словарь, содержащий именованные аргументы для *action*.5657Возвращаемое значение – это событие, которое можно использовать для последующей отмены этого события (см. [`cancel()`](https://python-all.ru/3.3/library/sched.html#sched.scheduler.cancel)).5859Изменено в версии 3.3: параметр *argument* стал необязательным.6061Новое в версии 3.3: *kwargs* добавлен параметр.6263#### `scheduler.enter(delay, priority, action, argument=(), kwargs={})`6465Планирует событие через *delay* единиц времени. За исключением относительного времени, остальные аргументы, результат и возвращаемое значение такие же, как у [`enterabs()`](https://python-all.ru/3.3/library/sched.html#sched.scheduler.enterabs).6667Изменено в версии 3.3: параметр *argument* стал необязательным.6869Новое в версии 3.3: *kwargs* добавлен параметр.7071#### `scheduler.cancel(event)`7273Удаляет событие из очереди. Если *event* не является событием, находящимся в настоящее время в очереди, этот метод возбудит исключение [`ValueError`](https://python-all.ru/3.3/library/exceptions.html#ValueError).7475#### `scheduler.empty()`7677Возвращает true, если очередь событий пуста.7879#### `scheduler.run(blocking=True)`8081Запускает все запланированные события. Этот метод будет ожидать (используя функцию `delayfunc()`, переданную конструктору) следующего события, затем выполнять его и так далее, пока не останется запланированных событий.8283Если *blocking* равен false, выполняет запланированные события, срок которых истекает раньше всего (если они есть), а затем возвращает крайний срок следующего запланированного вызова в планировщике (если он есть).8485Как *action*, так и *delayfunc* могут возбуждать исключение. В любом случае планировщик сохранит согласованное состояние и пробросит исключение. Если исключение возбуждено *action*, это событие не будет повторно предпринято при последующих вызовах [`run()`](https://python-all.ru/3.3/library/sched.html#sched.scheduler.run).8687Если выполнение последовательности событий занимает больше времени, чем доступно до следующего события, планировщик просто отстанет от графика. Ни одно событие не будет отброшено; вызывающий код отвечает за отмену событий, которые больше не актуальны.8889Новое в версии 3.3: *blocking* добавлен параметр.9091#### `scheduler.queue`9293Атрибут только для чтения, возвращающий список предстоящих событий в порядке их выполнения. Каждое событие представлено в виде [*именованного кортежа*](https://python-all.ru/3.3/glossary.html#term-named-tuple) со следующими полями: time, priority, action, argument, kwargs.94