Найти в Дзене

Программироание на языке python. Создание таймера с помощью класса threading.Timer

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Модуль threading и таймер

Пора вернуться к нашему любимому разделу (подборке) о многозадачности. Тема, которая нами не разбиралась это создание таймера. Есть два вида таймера в программировании: 1. Таймер запускается (или фиксируется его начальное значение), а потом мы можем проверять его значение (здесь). Такого типа таймеры обычно используются для измерения времени выполнения того или иного фрагмента кода. 2. Таймер запускается и автоматически вызывает нужное действие (функцию) с определённой периодичностью. Вот последнее самое интересное. Сегодня мы этим и займёмся. Впрочем, это не последняя статья о таймерах.

В модуле threading есть класс threading.Timer. С помощью него можно создать объект, который может запустить нужную функцию через указанный интервал

timer = threading.Timer(interval, function, args=None, kwargs=None)

  • interval — интервал запуска вызываемого объекта (функции),
  • function — вызываемый объект (функция),
  • args=None — позиционные аргументы function,
  • kwargs=None — ключевые аргументы function.

Обхект timer будет иметь два важных методаю timer.start() — запуск таймера, timer.cancel() — останавливает работу таймера, если он ещё не сраотал. Таймер вызывает указанную функцию через указанный интервал, но только один раз. Впрочем, можно обойти это ограничение (см. ниже).

Идея того, как сделать работу такого повторяемой очень проста. Нужно после его срабатывания, создавать новый таймер.

Первый вариант таймера.

Скриншот программы. Таймер вариант 1. Текст программы см. ниже по ссылке.
Скриншот программы. Таймер вариант 1. Текст программы см. ниже по ссылке.
primer249.py

Да, здесь вроде как такая хитрая рекурсия, которая в данном случае не съедает памяти. Впрочем, если само действие будет выполняться долго, а интервал таймера будет маленьким, то можем как раз получить это самое съедание стека. Как выход, поменять местами выполнение действия и запуск таймера.

Второй вариант таймера, впрочем, идеи те же самые..

Скриншот программы. Таймер вариант 2. Текст программы см. ниже по ссылке.
Скриншот программы. Таймер вариант 2. Текст программы см. ниже по ссылке.
primer250.py

Программа работает по принципам из предыдущей программы. Просто я отделил запуск таймера от тех действий, которые нужно произодить по таймеру. Что в общем логично.

Ну, пока всё!

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

У всех у нас таймер запущен, и он тикает
У всех у нас таймер запущен, и он тикает