threading.Timer(interval, function, args=[], kwargs={}) для периодического выполнения задач. interval - это интервал в секундах между вызовами function. function должна в конце своего выполнения создавать и запускать новый Timer.
import threading
def my_task():
print("Задача выполняется")
threading.Timer(5, my_task).start() # Запускаем таймер снова
timer = threading.Timer(5, my_task)
timer.start()
threading.Timer(), необходимо создать экземпляр Timer, указав интервал в секундах и функцию, которую нужно периодически вызывать. Важно помнить, что Timer выполняет функцию в отдельном потоке. Чтобы обеспечить периодичность, функция, вызываемая таймером, должна перезапускать таймер в конце своего выполнения.
Пример:
import threading
import time
def my_task():
"""Функция, выполняемая периодически."""
print(f"Задача выполняется: {time.strftime('%Y-%m-%d %H:%M:%S')}")
# Перезапуск таймера
global timer # Важно, чтобы таймер был виден из функции
timer = threading.Timer(5, my_task) # Пересоздаем таймер с нужным интервалом
timer.start()
# Создание и запуск таймера (первый запуск)
timer = threading.Timer(5, my_task)
timer.start()
# Пример: Остановка таймера через некоторое время
time.sleep(15) # Дадим таймеру поработать немного
print("Остановка таймера...")
timer.cancel() # Останавливаем таймер
print("Таймер остановлен.")
# (Закомментировано, чтобы пример выполнялся без ожидания)
# input("Нажмите Enter, чтобы выйти...")
Разъяснения:
import threading: Импортирует модуль threading для работы с потоками.import time: Импортирует модуль time для работы со временем (в примере используется для вывода текущего времени).my_task(): Это функция, которая будет выполняться периодически. Внутри неё мы выводим текущее время и, самое главное, создаем новый экземпляр threading.Timer, который запланирован к выполнению через заданный интервал (в примере 5 секунд). Этот новый таймер запускается с помощью timer.start(). Таким образом, функция перезапускает себя. Важно использовать global timer, чтобы таймер был доступен изнутри функции и можно было создать новый экземпляр.timer = threading.Timer(5, my_task): Создает экземпляр Timer. Первый аргумент - интервал в секундах (5 секунд), второй аргумент - функция, которую нужно вызвать (my_task).timer.start(): Запускает таймер.timer.cancel(): Останавливает таймер. Важно вызвать timer.cancel(), когда задача больше не требуется, чтобы остановить выполнение потока и избежать утечек ресурсов.time.sleep(15): В примере используется time.sleep для того, чтобы главный поток подождал 15 секунд, пока таймер выполняет свою задачу.Важные моменты:
threading.Timer после указания функции. Например: threading.Timer(5, my_task, args=(arg1, arg2)).timer.cancel()), чтобы избежать бесконечного выполнения задачи.Timer создает отдельный поток. Убедитесь, что ваш код потокобезопасен, особенно если он работает с общими ресурсами. Используйте блокировки (threading.Lock) при необходимости.sched или сторонних библиотек, таких как schedule или APScheduler, которые предоставляют более широкие возможности планирования.