JavaRush /Курси /Python SELF UA /Використання бібліотеки schedule для запуску задач за роз...

Використання бібліотеки schedule для запуску задач за розкладом

Python SELF UA
Рівень 39 , Лекція 4
Відкрита

1. Вступ до бібліотеки schedule

У цій лекції ми, як справжні годинникові механізми, навчимося запускати задачі за розкладом, щоб наш код працював тоді, коли ми цього забажаємо. Приготуйтеся, сьогодні ми будемо приручати час!

Бібліотека schedule — це легковажний модуль для запуску функцій за заданим розкладом. Якщо ваш код має виконуватись за певним розкладом, наприклад, збирати дані кожного дня о 6 ранку чи надсилати щоденні нагадування, то schedule — це саме те, що вам потрібно.

Ось основні переваги schedule:

  • Простота: інтуїтивно зрозумілий інтерфейс, який набагато простіше використовувати, ніж стандартне рішення через cron чи threading.
  • Мінімалізм: жодних зайвих функцій — тільки ті, які потрібні.
  • Зрозумілість: використання майже природної мови для задання розкладу.

Встановлення бібліотеки

Для початку роботи потрібно встановити бібліотеку schedule. Як і для більшості Python-бібліотек, використовуємо pip:

Bash
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. Налаштування повторюваних задач

Давайте почнемо з чогось простого — заплануємо функцію, яка виконуватиметься щогодини. Ми створимо просту функцію, яка виводить вітальне повідомлення, і запустимо її за розкладом.

Приклад: щогодинне привітання

Python

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 хвилин

Python

import schedule
import time

def task():
    print("Ця задача виконується кожні 10 хвилин.")

# Заплануємо запуск задачі кожні 10 хвилин
schedule.every(10).minutes.do(task)

while True:
    schedule.run_pending() # Викликаємо всі задачі, час яких настав
    time.sleep(1)

Приклад: запуск задачі у визначені дні

А тепер спробуємо запланувати задачу, яка виконуватиметься у певні дні тижня, наприклад, по понеділках і середах, але лише о 9 ранку.

Python

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 легко впорається і з цим. Наприклад, одна задача може запускатися щоранку, інша — по п’ятницях.

Приклад: об'єднання різних задач в одному скрипті

Python

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 не виконає її заднім числом.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ