Programar tareas con schedule
Usando la librería schedule
puedes programar tareas para que se ejecuten cada cierto intervalo. En este ejemplo ejecutamos tarea
una vez cada 10 minutos.
import schedule
import time
from datetime import datetime
def tarea():
print(f"{datetime.now()}: Tu tarea")
schedule.every(10).minutes.do(tarea)
while True:
schedule.run_pending()
time.sleep(1)
Es importante notar el uso de sleep(1)
. Al tener un bucle while
infinito, sin este pequeño sleep
nuestro programa estaría continuamente ejecutando el bucle y sería un desperdicio de recursos.
Por otro lado, aunque este ejemplo funciona perfectamente y es válido para la mayoría de los casos, es posible que quieras usar un thread distinto.
Con el ejemplo anterior, si tarea
tarda en ejecutarse más de 10 minutos, estaría bloqueando la siguiente ejecución. Esto haría que tu tarea ya no se ejecutase cada 10
minutos. La tarea podría bloquear la siguiente ejecución.
Si quieres que tu tarea se ejecute exactamente cada 10 minutos sin importar que tarea
tarde, por ejemplo, 11 minutos, puedes hacer lo siguiente.
import schedule
import time
import threading
from datetime import datetime
def tarea():
print(f"{datetime.now()}: Tu tarea")
def tarea_threaded():
task_thread = threading.Thread(target=tarea)
task_thread.start()
schedule.every(10).minutes.do(tarea_threaded)
while True:
schedule.run_pending()
time.sleep(1)
✏️ Ejercicios:
- En vez de ejecutar
tarea
cada cierto intervalo, usaschedule
para ejecutarla todos los días a las 23:59.