1. Introduzione alla libreria schedule
In questa lezione, come dei veri orologiai, impareremo a avviare task secondo un programma, così che il nostro codice funzioni quando lo desideriamo. Preparatevi, oggi domineremo il tempo!
La libreria schedule
è un modulo leggero per avviare funzioni basandosi su un programma definito.
Se il tuo codice deve essere eseguito a cadenze regolari, ad esempio raccogliere dati ogni giorno alle 6 del mattino o inviare promemoria giornalieri, allora schedule
è proprio quello di cui hai bisogno.
Ecco i principali vantaggi di schedule
:
- Semplicità: un'interfaccia intuitiva molto più semplice da usare rispetto alle soluzioni standard come
cron
othreading
. - Minimalismo: nessuna funzionalità inutile — solo quelle che servono.
- Chiarezza: utilizzo di un linguaggio quasi naturale per definire i programmi.
Installazione della libreria
Per iniziare, è necessario installare la libreria schedule
. Come per la maggior parte delle librerie Python, utilizziamo pip
:
pip install schedule
Ora che tutto è pronto, immergiamoci nel mondo dell'automazione e vediamo come schedule
può cambiare il tuo lavoro quotidiano.
Metodi principali della libreria schedule
La libreria schedule
offre metodi per configurare attività in momenti diversi e con frequenze di esecuzione variabili:
every().day.at("HH:MM")
— esecuzione del task ogni giorno a un'ora specifica.every().hour
— esecuzione del task ogni ora.every().minute
— esecuzione del task ogni minuto.every().week.at("HH:MM")
— esecuzione del task ogni settimana a un'ora specifica.every().monday.at("HH:MM")
— esecuzione del task ogni lunedì a un'ora specifica.every(10).seconds
— esecuzione del task ogni 10 secondi (o qualsiasi altro intervallo di tempo).
2. Configurazione di task ricorrenti
Cominciamo con qualcosa di semplice — pianifichiamo una funzione che verrà eseguita ogni ora. Creeremo una funzione semplice che stampa un messaggio di benvenuto e la eseguiremo secondo il programma.
Esempio: saluto orario
import schedule
import time
def say_hello():
print("Ciao! Stiamo lavorando nell'automazione oraria.")
# Avvia la funzione say_hello ogni ora
schedule.every().hour.do(say_hello)
while True:
# Esegue tutti i task pianificati
schedule.run_pending()
time.sleep(1)
Ecco fatto — il tuo primo script con schedule
! In questo esempio utilizziamo il metodo
every().hour.do(say_hello)
, per dire "Ciao!" ogni ora. Interessante, vero?
Il comando schedule.every().hour.do(say_hello)
non esegue la funzione say_hello
, ma aggiunge
la sua esecuzione al programma. Il vero richiamo della funzione avviene quando arriva il momento opportuno - verrà chiamata utilizzando il codice schedule.run_pending()
.
3. Configurazione di intervalli più complessi
E se volessimo avviare attività non solo ogni ora, ma anche, diciamo, ogni 10 minuti o in giorni specifici della settimana? schedule
supporta la maggior parte delle espressioni temporali comuni e puoi usarle con altrettanta semplicità.
Esempio: esecuzione di un task ogni 10 minuti
import schedule
import time
def task():
print("Questo task viene eseguito ogni 10 minuti.")
# Pianifichiamo l'esecuzione del task ogni 10 minuti
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Esegue tutti i task pianificati
time.sleep(1)
Esempio: esecuzione di un task in giorni specifici
Ora proviamo a pianificare un task che verrà eseguito in giorni specifici della settimana, ad esempio il lunedì e il mercoledì, ma solo alle 9 del mattino.
import schedule
import time
def monday_wednesday_task():
print("Questo task viene eseguito il lunedì e il mercoledì alle 9 del mattino.")
# Esecuzione del task il lunedì e mercoledì alle 9 del mattino
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)
Come puoi vedere, schedule
gestisce varie espressioni temporali, inclusi i giorni della settimana e l'orario esatto di avvio. È incredibilmente utile per pianificare task sincronizzati con il tuo lavoro o eventi programmati.
4. Gestione dei task con condizioni temporali diverse
Se il tuo script esegue diversi task, e ciascuno ha il proprio programma, schedule
se la cava benissimo anche con questo. Ad esempio, un task può essere eseguito ogni mattina, e un altro il venerdì.
Esempio: combinazione di diversi task in uno script
import schedule
import time
def morning_task():
print("Buongiorno! È tempo di fare il nostro task mattutino.")
def friday_task():
print("Evviva, è venerdì! È il momento del task del venerdì.")
# Task mattutino ogni mattina alle 7:30
schedule.every().day.at("07:30").do(morning_task)
# Task del venerdì ogni venerdì alle 16:00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Consigli pratici ed errori comuni
Quando si tratta di automatizzare task con schedule
, ci sono alcuni aspetti da tenere a mente.
Innanzitutto, ricorda che schedule
esegue i task nel thread principale. Questo significa che se il tuo task è lungo o può bloccare l'esecuzione di altri task, dovresti pensare all'uso di multithreading o chiamate asincrone per i task.
Inoltre, se il tuo task deve essere eseguito a un orario ben preciso ed è cruciale, assicurati che il tuo dispositivo sia acceso e lo script in funzione. schedule
non funzionerà se lo script è stato arrestato o il dispositivo è spento.
E infine, l'equivoco più comune — aspettarsi che schedule
possa compensare i task saltati. Purtroppo, se il tuo script non era in funzione quando il task doveva essere eseguito,
schedule
non lo eseguirà retroattivamente.
GO TO FULL VERSION