1. Konfigurowanie prostego zadania
Zaczniemy od prostego przykładu: jak sprawić, by nasz kod codziennie przypominał nam o sprawdzeniu poczty.
import schedule
import time
def job():
print("Przypomnienie: sprawdź swoją pocztę!")
# Ustawianie zadania na codzienne uruchamianie
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
W tym przykładzie funkcja job
będzie uruchamiana codziennie o 9 rano. Biblioteka
schedule
sprawdza planowane zadania co 1 sekundę za pomocą
run_pending()
. Pamiętaj, że twój kod musi być stale uruchomiony, aby zadanie się wykonywało.
Porady dla sprytnych
Zwróć uwagę, że możesz używać every().hour
, aby uruchamiać zadanie co godzinę, lub every(2).hours
, aby uruchamiać je co dwie godziny. Opcje są niemal nieograniczone.
2. Przypomnienia w dni robocze
Teraz trochę pokomplikujmy: załóżmy, że potrzebujesz przypomnienia tylko w dni robocze. Na przykład, każdego dnia roboczego chcemy otrzymywać to samo przypomnienie.
import schedule
import time
def weekday_job():
print("Przypomnienie robocze: nie zapomnij przygotować raportu!")
schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)
while True:
schedule.run_pending()
time.sleep(1)
W tym przypadku o 8 rano każdego dnia roboczego dostaniesz przypomnienie o przygotowaniu raportu. Dzięki temu twój skrypt zawsze będzie pilnował harmonogramu, nawet jeśli o tym zapomnisz.
3. Konfigurowanie tygodniowych zadań
A co, jeśli chcesz otrzymywać przypomnienie w każdą niedzielę? Powiedzmy, że chcesz sprawdzić zapasy kawy przed tygodniem pracy. Zobaczmy, jak to zrobić:
import schedule
import time
def sunday_job():
print("Przypomnienie: sprawdź zapasy kawy na przyszły tydzień!")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Ten niewielki fragment kodu wprowadzi porządek do twojej niedzieli, przypominając ci o przygotowaniu się na nadchodzący tydzień. Teraz twoja kawa nigdy nie skończy się w najmniej oczekiwanym momencie. Tak, wiem, że to może być tragedia dla wielu.
4. Zmiana zadań
Usuwanie zadań z harmonogramu
Jeśli trzeba usunąć zadanie, można skorzystać z metody cancel_job()
. Na przykład, aby usunąć zadanie z harmonogramu, można uzyskać obiekt zadania i wywołać dla niego
cancel_job()
.
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Usunięcie zadania z harmonogramu
Przenoszenie zadania
Aby zmienić czas wykonywania zadania, można ponownie przypisać harmonogram. Na przykład, jeśli zadanie było zaplanowane na 9:00, ale teraz musi zostać przesunięte na 10:00, możemy zaktualizować jego harmonogram.
# Planujemy zadanie na każdy dzień o 9:00
job = schedule.every().day.at("09:00").do(my_task)
# Przenosimy zadanie na 10:00
job.clear() # Czyszczenie obecnego harmonogramu zadania
job.at("10:00") # Przeniesienie na nowy czas
Sprawdzanie aktywnych zadań
Aby sprawdzić, czy są zaplanowane zadania, można wyświetlić listę wszystkich aktywnych zadań za pomocą
schedule.jobs
. To przydatne, gdy chcemy uzyskać informacje o wszystkich zadaniach znajdujących się w harmonogramie.
# Dodajemy kilka zadań
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Przegląd wszystkich aktywnych zadań
for job in schedule.jobs:
print("Zadanie:", job)
Usuwanie wszystkich zadań z harmonogramu
Jeśli trzeba wyczyścić harmonogram i usunąć wszystkie zaplanowane zadania, można użyć metody
clear()
.
# Planujemy kilka zadań
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Czyszczenie harmonogramu
schedule.clear()
Wykonanie zadania tylko raz
Czasami trzeba wykonać zadanie tylko raz w określonym czasie. Po wykonaniu takiego zadania można użyć metody schedule.cancel_job(job)
, aby je anulować.
def one_time_task():
print("Zadanie wykonane raz")
return schedule.CancelJob # Anulowanie zadania po wykonaniu
# Planowanie wykonania zadania raz
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Realne scenariusze użycia
A teraz trochę poważniej: jak takie automatyzacje są stosowane w profesjonalnym środowisku? W rzeczywistości możesz używać harmonogramowania zadań do:
- Automatycznego zbierania danych każdego dnia lub tygodnia.
- Tworzenia i wysyłania raportów w określony dzień i godzinę.
- Monitorowania stanu serwera lub interfejsu webowego, z powiadomieniami o błędach.
- Uruchamiania regularnych backupów bazy danych.
Typowe błędy
Kiedy zajmujesz się harmonogramowaniem zadań, uważaj na niesynchronizowany czas, na przykład, jeśli twój serwer i komputer lokalny są w różnych strefach czasowych. Również, jeśli twój skrypt przypadkiem zakończy się, zaplanowane zadania nie zostaną wykonane. Używaj narzędzi do monitorowania, takich jak cron (dla systemów Unix-like) lub Windows Task Scheduler.
Jeśli przypadkiem zapomnisz dodać time.sleep(1)
na końcu swojej pętli, otrzymasz proces, który będzie obciążał procesor bez końca, jak nadaktywny kod. Generalnie, nie zapominaj utrzymywać skryptu w odpowiednim stanie.
GO TO FULL VERSION