Foros Python

Versión completa: Ejecutar rutina cada determinado tiempo
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Estoy pensando en hacer un programa de rutinas en Python que se ejecuten por horas del día y para ello llamo a una rutina principal que corro cuando inicia windows. 
Para iniciar diseñé la rutina básica siguiente para probarla en Windows, para dar inicio a mi proyecto y es la siguiente:

Código:
import os
import time
from plyer import notification

Ejecucion = "Inicio"

while Ejecucion =="Inicio":
    tiempo_hora = int(time.strftime("%H",time.localtime()))
    tiempo_minutos = int(time.strftime("%M",time.localtime()))
    tiempo_segundos = int(time.strftime("%S",time.localtime()))
    tiempo = time.strftime("%H:%M:%S",time.localtime())
    time.sleep(1)
   
    # Alarma cada hora
    if tiempo_minutos == 0 and tiempo_segundos == 0:
        notification.notify (
        title = "NOTIFICACIÓN DE LA HORA",
        message = f"Son las {tiempo_hora}:{tiempo_minutos}" )

Sin embargo, tengo unos problemas porque al parecer a veces aparece o se bloquea y no sé cuál es el motivo. 
Agradezco sus sugerencias sobre la idea. Muchas gracias.
Hola, bienvenido.

time.sleep(1) suspende la ejecución por un segundo (es un valor aproximado), pero eso no quiere decir que el resto de las funciones se van a ejecutar exactamente cada un segundo. Cada línea de código a su vez consume tiempo de ejecución, por lo cual el bloque del bucle se va a estar ejecutando en realidad cada poco más de un segundo, y esa diferencia hace que tal vez tiempo_segundos sea 0 muy pocas veces. Aún más, otras variables ajenas a tu programa pueden hacer que la iteración ocurra con un intervalo todavía mayor, por ejemplo si hay otros procesos consumiendo muchos recursos o recibiendo la atención del procesador.

Teniendo esto en cuenta, en principio podrías reducir el argumento de time.sleep() (0.5, 0.1, o el valor que te sirva) para asegurarte de que el código se ejecute al menos una vez por segundo y así no perderte el cambio de hora. Pero sería más conveniente que simplementes programe vía Windows que tu programa corra cada hora. De esa manera seguramente tenés un resultado más preciso y que consume menos recursos, porque el programa no está en permanente ejecución.

Saludos