1. Configuración de una tarea sencilla
Empecemos con el ejemplo más simple: cómo hacer que nuestro código nos recuerde revisar el correo todos los días.
import schedule
import time
def job():
print("Recordatorio: ¡Revisa tu correo!")
# Configuración de una tarea para que se ejecute diariamente
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
En este ejemplo, la función job se ejecutará todos los días a las 9 de la mañana. La biblioteca schedule verifica si hay tareas programadas cada segundo con run_pending(). No olvides que tu código debe estar en ejecución constantemente para que la tarea funcione.
Notas para hackers pro
Ten en cuenta que puedes usar every().hour para ejecutar una tarea cada hora, o every(2).hours para hacerlo cada dos horas. Las posibilidades son casi infinitas.
2. Recordatorios en días laborales
Ahora vamos a complicar un poco más: supongamos que necesitas recordatorios solo en días laborales. Por ejemplo, todos los días laborables queremos recibir el mismo recordatorio.
import schedule
import time
def weekday_job():
print("Recordatorio laboral: ¡No olvides preparar el informe!")
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)
En este caso, todos los días laborales a las 8 de la mañana recibirás un recordatorio para preparar el informe. Así tu script vigilará el horario aunque tú te olvides de ello.
3. Configuración de tareas semanales
¿Qué pasa si quieres un recordatorio cada domingo? Por ejemplo, quieres verificar las provisiones de café antes de la semana laboral. Veamos cómo hacerlo:
import schedule
import time
def sunday_job():
print("Recordatorio: ¡Verifica las provisiones de café para la próxima semana!")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Este pequeño fragmento de código añadirá algo de orden a tu domingo, recordándote que te prepares para la semana siguiente. Ahora nunca te faltará café en el momento menos esperado. Sí, sé que eso puede ser una tragedia para muchos.
4. Modificación de tareas
Eliminación de tareas del horario
Si necesitas cancelar la ejecución de una tarea, puedes usar el método cancel_job(). Por ejemplo, para eliminar una tarea del horario, puedes obtener el objeto de la tarea y llamarle cancel_job().
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Eliminación de la tarea del horario
Reprogramación de una tarea
Para cambiar el horario de una tarea, puedes reasignar su programación. Por ejemplo, si una tarea estaba programada para las 9:00, pero ahora necesitas cambiarla a las 10:00, puedes modificar su horario.
# Programando una tarea diaria a las 9:00
job = schedule.every().day.at("09:00").do(my_task)
# Reprogramando la tarea a las 10:00
job.clear() # Limpiar la programación actual de la tarea
job.at("10:00") # Asignar nueva hora
Revisión de tareas activas
Para saber si hay tareas programadas, puedes listar todas las tareas activas con schedule.jobs. Esto es útil cuando necesitas información sobre todas las tareas programadas.
# Añadiendo algunas tareas
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Revisar todas las tareas activas
for job in schedule.jobs:
print("Tarea:", job)
Eliminación de todas las tareas del horario
Si necesitas limpiar el horario y eliminar todas las tareas programadas, puedes usar el método clear().
# Programando algunas tareas
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Limpiar el horario
schedule.clear()
Ejecución de una tarea única
A veces necesitas ejecutar una tarea solo una vez en un momento específico. Después de la ejecución, puedes usar el método schedule.cancel_job(job) para cancelarla.
def one_time_task():
print("Tarea completada una sola vez")
return schedule.CancelJob # Cancelar la tarea después de su ejecución
# Programar ejecución única
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Escenarios reales de uso
Ahora hablando más en serio: ¿cómo se implementan estas automatizaciones en el entorno profesional? En la vida real, puedes usar la programación de tareas para:
- Recopilación automática de datos todos los días o cada semana.
- Creación y envío de informes en un día y hora específicos.
- Monitoreo del estado de tu servidor o interfaz web con notificaciones de errores.
- Ejecución de copias de seguridad de la base de datos de forma regular.
Errores comunes
Mientras trabajas programando tareas, ten cuidado con la desincronización de tiempo, por ejemplo, si tu servidor y tu computadora local están en diferentes zonas horarias. Además, si tu script se detiene accidentalmente, la tarea programada no se ejecutará. Usa herramientas de monitoreo como cron (para sistemas tipo Unix) o Windows Task Scheduler.
Si accidentalmente olvidas poner time.sleep(1) al final de tu bucle, obtendrás un proceso que sobrecargará la CPU sin descanso, como un código hiperactivo. Así que, no te olvides de mantener tu script en buen estado.
GO TO FULL VERSION