CodeGym /Kurs Javy /Python SELF PL /Konfigurowanie powtarzających się zadań (codzienne i tygo...

Konfigurowanie powtarzających się zadań (codzienne i tygodniowe przypomnienia)

Python SELF PL
Poziom 40 , Lekcja 0
Dostępny

1. Konfigurowanie prostego zadania

Zaczniemy od prostego przykładu: jak sprawić, by nasz kod codziennie przypominał nam o sprawdzeniu poczty.

Python

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.

Python

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ć:

Python

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().

Python

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.

Python

# 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.

Python

# 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().

Python

# 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ć.

Python

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.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION