1. Configurare un'attività semplice
Iniziamo con un esempio semplice: come far sì che il nostro codice ci ricordi ogni giorno di controllare l'email.
import schedule
import time
def job():
print("Promemoria: controlla la tua email!")
# Configurare un'attività da eseguire ogni giorno
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
In questo esempio la funzione job
verrà chiamata ogni giorno alle 9 del mattino. La libreria schedule
verifica ogni secondo con run_pending()
se ci sono attività pianificate. Ricorda che il tuo codice deve essere sempre in esecuzione affinché l'attività venga eseguita.
Note per gli hacker esperti
Nota che puoi usare every().hour
per eseguire un'attività ogni ora o every(2).hours
per eseguirla ogni due ore. Le possibilità sono praticamente infinite.
2. Promemoria nei giorni lavorativi
Ora aumentiamo la complessità: supponiamo di voler ricevere un promemoria solo nei giorni lavorativi. Ad esempio, vogliamo lo stesso promemoria ogni giorno feriale.
import schedule
import time
def weekday_job():
print("Promemoria lavorativo: non dimenticare di preparare il report!")
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)
In questo caso, ogni mattina feriale alle 8 riceverai un promemoria per preparare il report. In questo modo il tuo script seguirà sempre il programma, anche se tu te ne dimentichi.
3. Configurare attività settimanali
E se volessimo un promemoria ogni domenica? Supponiamo di voler controllare le scorte di caffè prima della settimana lavorativa. Vediamo come fare:
import schedule
import time
def sunday_job():
print("Promemoria: controlla le scorte di caffè per la prossima settimana!")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Questo piccolo pezzo di codice porterà un po' di ordine alla tua domenica, ricordandoti di prepararti per la settimana successiva. Ora, il caffè non finirà mai nei momenti meno opportuni. Sì, lo so, potrebbe essere una tragedia per molti.
4. Modificare le attività
Rimuovere attività dal programma
Se devi annullare un'attività, puoi usare il metodo cancel_job()
. Ad esempio, per rimuovere un'attività dal programma, puoi ottenere l'oggetto dell'attività e chiamare su di esso cancel_job()
.
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Rimuovi l'attività dal programma
Modificare un'attività
Per modificare l'orario di esecuzione di un'attività, puoi ridefinire il programma. Ad esempio, se l'attività era pianificata per le 9:00 ma ora deve essere spostata alle 10:00, possiamo riscrivere il programma.
# Pianifica un'attività ogni giorno alle 9:00
job = schedule.every().day.at("09:00").do(my_task)
# Sposta l'attività alle 10:00
job.clear() # Pulisci l'orario corrente dell'attività
job.at("10:00") # Sposta a un nuovo orario
Verificare le attività attive
Per verificare se ci sono attività pianificate, puoi stampare un elenco di tutte le attività attive usando schedule.jobs
. È utile quando vuoi ottenere informazioni su tutte le attività presenti nel programma.
# Aggiungi alcune attività
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Mostra tutte le attività attive
for job in schedule.jobs:
print("Attività:", job)
Rimuovere tutte le attività dal programma
Se devi ripulire il programma e rimuovere tutte le attività pianificate, puoi usare il metodo clear()
.
# Pianifica alcune attività
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Pulisci il programma
schedule.clear()
Eseguire un'attività solo una volta
A volte è necessario eseguire un'attività solo una volta in un'orario specifico. Dopo l'esecuzione di tale attività, è possibile utilizzare il metodo schedule.cancel_job(job)
per annullarla.
def one_time_task():
print("Attività eseguita una sola volta")
return schedule.CancelJob # Annulla l'attività dopo averla eseguita
# Pianifica l'attività da eseguire una sola volta
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Scenari di utilizzo reali
E ora parliamo seriamente: come vengono implementate automazioni simili in ambienti professionali? Nella vita reale puoi utilizzare la pianificazione delle attività per:
- Raccogliere dati automaticamente ogni giorno o ogni settimana.
- Creare e inviare report in giorni e orari specifici.
- Monitorare lo stato del tuo server o dell'interfaccia web con notifiche di errori.
- Eseguire backup regolari del database.
Errori comuni
Durante la pianificazione delle attività fai attenzione alla desincronizzazione degli orari, ad esempio, se il tuo server e il tuo computer locale si trovano in fusi orari diversi. Inoltre, se il tuo script termina accidentalmente, l'attività pianificata non verrà eseguita. Usa strumenti di monitoraggio come cron (per sistemi Unix-like) o Windows Task Scheduler.
Se dimentichi di aggiungere time.sleep(1)
alla fine del ciclo, otterrai un processo che caricherà la CPU senza sosta, come un codice iperattivo. Insomma, non dimenticare di mantenere il tuo script operativo e stabile.
GO TO FULL VERSION