CodeGym /Cursos /Python SELF ES /Configuración de tareas repetitivas (recordatorios diario...

Configuración de tareas repetitivas (recordatorios diarios y semanales)

Python SELF ES
Nivel 40 , Lección 0
Disponible

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.

Python

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.

Python

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:

Python

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

Python

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.

Python

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

Python

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

Python

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

Python

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.

1
Tarea
Python SELF ES, nivel 40, lección 0
Bloqueada
Recordatorio diario
Recordatorio diario
2
Tarea
Python SELF ES, nivel 40, lección 0
Bloqueada
Recordatorios en días laborables
Recordatorios en días laborables
3
Tarea
Python SELF ES, nivel 40, lección 0
Bloqueada
Recordatorio semanal
Recordatorio semanal
4
Tarea
Python SELF ES, nivel 40, lección 0
Bloqueada
Recopilación automatizada de datos y reportes
Recopilación automatizada de datos y reportes
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION