1. Introducción a la librería schedule
En esta clase, como si fuéramos mecanismos de relojería, aprenderemos a ejecutar tareas programadas para que nuestro código funcione cuando nosotros queramos. ¡Prepárate, hoy vamos a dominar el tiempo!
La librería schedule
es un módulo ligero para ejecutar funciones en tiempos programados. Si tu código debe ejecutarse de acuerdo a un horario específico, por ejemplo, recolectar datos todos los días a las 6 a.m. o enviar recordatorios diarios, entonces schedule
es justo lo que necesitas.
Estos son los principales beneficios de schedule
:
- Sencillez: una interfaz intuitiva, mucho más fácil de usar que soluciones estándar como
cron
othreading
. - Minimalismo: sin características innecesarias — solo lo que se necesita.
- Claridad: se utiliza un lenguaje casi natural para definir el horario.
Instalación de la librería
Para comenzar a trabajar necesitas instalar la librería schedule
. Como con la mayoría de las librerías de Python, usamos pip
:
pip install schedule
Ahora que todo está listo, adentrémonos en el mundo de la automatización y veamos cómo schedule
puede cambiar tu trabajo diario.
Métodos principales de la librería schedule
La librería schedule
proporciona métodos para configurar tareas en diferentes horarios y frecuencias:
every().day.at("HH:MM")
— ejecuta la tarea todos los días a una hora específica.every().hour
— ejecuta la tarea cada hora.every().minute
— ejecuta la tarea cada minuto.every().week.at("HH:MM")
— ejecuta la tarea cada semana a una hora específica.every().monday.at("HH:MM")
— ejecuta la tarea los lunes a una hora específica.every(10).seconds
— ejecuta la tarea cada 10 segundos (o cualquier otro intervalo de tiempo).
2. Configuración de tareas recurrentes
Vamos a empezar con algo sencillo: programar una función que se ejecute cada hora. Crearemos una función simple que muestra un mensaje de bienvenida y la programaremos.
Ejemplo: saludo cada hora
import schedule
import time
def say_hello():
print("¡Hola! Estamos trabajando en la automatización horaria.")
# Ejecutar la función say_hello cada hora
schedule.every().hour.do(say_hello)
while True:
# Ejecuta todas las tareas programadas que estén pendientes
schedule.run_pending()
time.sleep(1)
¡Eso es todo! — tu primer script con schedule
. En este ejemplo usamos el método
every().hour.do(say_hello)
para decir "¡Hola!" cada hora. Interesante, ¿verdad?
La línea schedule.every().hour.do(say_hello)
no ejecuta la función say_hello
, sino que añade su ejecución al horario. La llamada real de la función ocurrirá cuando sea su tiempo - será invocada por el código schedule.run_pending()
.
3. Configuración de intervalos más complejos
¿Qué pasa si queremos ejecutar tareas no solo cada hora, sino, por ejemplo, cada 10 minutos o en días específicos de la semana? schedule
admite la mayoría de las expresiones de tiempo comunes, y puedes usarlas con la misma facilidad.
Ejemplo: ejecutar una tarea cada 10 minutos
import schedule
import time
def task():
print("Esta tarea se ejecuta cada 10 minutos.")
# Programar la tarea para que se ejecute cada 10 minutos
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Ejecuta todas las tareas programadas pendientes
time.sleep(1)
Ejemplo: tarea en días específicos
Ahora intentemos programar una tarea que se ejecute en días específicos de la semana, como los lunes y miércoles, pero solo a las 9 a.m.
import schedule
import time
def monday_wednesday_task():
print("Esta tarea se ejecuta los lunes y miércoles a las 9 a.m.")
# Ejecutar la tarea los lunes y miércoles a las 9 a.m.
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)
Como puedes ver, schedule
maneja diferentes expresiones de tiempo, incluyendo días de la semana y horarios específicos. Es increíblemente útil para programar tareas que coincidan con tu trabajo o eventos planeados.
4. Manejo de tareas con diferentes condiciones de tiempo
Si tu script ejecuta varias tareas y cada una tiene su propio horario, schedule
también lo gestiona fácilmente. Por ejemplo, una tarea puede ejecutarse todas las mañanas, y otra los viernes.
Ejemplo: combinación de diferentes tareas en un solo script
import schedule
import time
def morning_task():
print("¡Buenos días! Es hora de la tarea matutina.")
def friday_task():
print("¡Hurra, es viernes! Hora de la tarea del viernes.")
# Tareas matutinas cada mañana a las 7:30
schedule.every().day.at("07:30").do(morning_task)
# Tareas del viernes cada viernes a las 16:00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Consejos prácticos y errores comunes
Cuando se trata de automatizar tareas con schedule
, hay algunos aspectos a tener en cuenta.
Primero, recuerda que schedule
ejecuta tareas en el hilo principal. Esto significa que si tu tarea es prolongada o puede bloquear otras tareas, deberías considerar usar hilos múltiples o llamadas asíncronas para las tareas.
Segundo, si tu tarea debe ejecutarse a una hora exacta y eso es crítico, asegúrate de que tu dispositivo esté encendido y el script en ejecución. schedule
no funcionará si el script está detenido o el dispositivo apagado.
Por último, el error más común es esperar que schedule
pueda compensar tareas saltadas. Desafortunadamente, si tu script no estaba funcionando cuando se suponía que una tarea debía ejecutarse, schedule
no la ejecutará retroactivamente.
GO TO FULL VERSION