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 не виконає її заднім числом.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ