1. Введение в библиотеку schedule
В этой лекции мы, как настоящие часовые механизмы, научимся запускать задачи по расписанию, чтобы наш код работал тогда, когда мы этого захотим. Приготовьтесь, сегодня мы будем приручать время!
Библиотека schedule — это легковесный модуль для запуска функций по заданному расписанию. Если ваш код должен исполняться по определенному расписанию, например, собирать данные каждый день в 6 утра или отправлять ежедневные напоминания, то schedule — это то, что вам нужно.
Вот основные преимущества schedule:
- Простота: интуитивно понятный интерфейс, который гораздо проще использовать, чем стандартное решение через
cronилиthreading. - Минимализм: нет лишних функций — только те, которые нужны.
- Понятность: использование почти естественного языка для задания расписания.
Установка библиотеки
Для начала работы необходимо установить библиотеку schedule. Как и для большинства Python-библиотек, используем pip:
pip install schedule
Теперь, когда все готово, давайте погрузимся в мир автоматизации и увидим, как schedule может изменить вашу повседневную работу.
Основные методы библиотеки schedule
Библиотека schedule предоставляет методы для настройки задач на разное время и с разной частотой выполнения:
every().day.at("HH:MM")— выполнение задачи каждый день в определенное время.every().hour— выполнение задачи каждый час.every().minute— выполнение задачи каждую минуту.every().week.at("HH:MM")— выполнение задачи каждую неделю в определенное время.every().monday.at("HH:MM")— выполнение задачи по понедельникам в определенное время.every(10).seconds— выполнение задачи каждые 10 секунд (или любое другое количество времени).
2. Настройка повторяющихся задач
Давайте начнем с чего-то простого — запланируем функцию, которая будет выполняться каждый час. Мы создадим простую функцию, которая выводит приветственное сообщение, и запустим её по расписанию.
Пример: каждочасовое приветствие
import schedule
import time
def say_hello():
print("Привет! Мы работаем в часовой автоматизации.")
# Запускаем функцию say_hello каждый час
schedule.every().hour.do(say_hello)
while True:
# Выполняет все задачи, время которых подошло
schedule.run_pending()
time.sleep(1)
Вот и всё — ваш первый скрипт с schedule! В этом примере мы используем метод every().hour.do(say_hello), чтобы говорить "Привет!" каждый час. Интересно, не правда ли?
Команда schedule.every().hour.do(say_hello) не выполняет функцию say_hello, а добавляет ее вызов в расписание. Реальный же вызов функции произойдет когда подойдет ее время - она будет вызвана с помощью кода schedule.run_pending().
3. Настройка более сложных интервалов
Что, если мы хотим запускать задачи не только каждый час, но и, скажем, каждые 10 минут или в определенные дни недели? schedule поддерживает большинство распространенных временных выражений, и вы можете использовать их с не меньшей легкостью.
Пример: запуск задачи каждые 10 минут
import schedule
import time
def task():
print("Эта задача выполняется каждые 10 минут.")
# Запланируем запуск задачи каждые 10 минут
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Вызываем все задачи, время которых подошло
time.sleep(1)
Пример: запуск задачи по определенным дням
А теперь попробуем запланировать задачу, которая будет выполняться в определенные дни недели, например, по понедельникам и средам, но только в 9 утра.
import schedule
import time
def monday_wednesday_task():
print("Эта задача выполняется по понедельникам и средам в 9 утра.")
# Запуск задачи по понедельникам и средам в 9 утра
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)
while True:
schedule.run_pending()
time.sleep(1)
Как видите, schedule обрабатывает различные временные выражения, включая дни недели и точное время запуска. Это невероятно удобно для планирования задач, синхронизированных с вашей работой или запланированными событиями.
4. Обработка задач с разными временными условиями
Если ваш скрипт выполняет несколько задач, и каждая из них имеет свое расписание, schedule легко справится и с этим. Например, одна задача может запускаться каждое утро, другая — по пятницам.
Пример: объединение разных задач в одном скрипте
import schedule
import time
def morning_task():
print("Доброе утро! Время для утренней задачи.")
def friday_task():
print("Ура, пятница! Время для пятничной задачи.")
# Утренние задачи каждое утро в 7:30
schedule.every().day.at("07:30").do(morning_task)
# Пятничные задачи каждую пятницу в 16:00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Практические советы и типичные ошибки
Когда дело доходит до автоматизации задач с помощью schedule, есть несколько аспектов, на которые стоит обратить внимание.
Во-первых, помните, что schedule запускает задачи в основном потоке. Это значит, что если ваша задача длительная или может заблокировать выполнение других задач, стоит задуматься об использовании многопоточности или асинхронных вызовов для задач.
Во-вторых, если ваша задача должна выполняться в строго определенное время и это критично, убедитесь, что ваше устройство включено и скрипт работает. schedule не будет работать, если скрипт остановлен или устройство выключено.
И, наконец, самое распространенное заблуждение — ожидание того, что schedule сможет компенсировать пропущенные задачи. К сожалению, если ваш скрипт не работал, когда задача должна была быть выполнена, schedule не выполнит её задним числом.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ