Я написал собственный код для решения моей проблемы. Размещение здесь на случай, если это кому-то поможет. Любые предложения по оптимизации приветствуются.
Первый бесконечный l oop запускает задание при наступлении времени запуска. 2-й бесконечный l oop просыпается каждые x минут, чтобы проверить, приближается ли время следующего запуска. Если да, он выполняется, иначе возвращается в режим сна. Если конечное время выполнения достигнуто, оно вспыхивает
def execute_schedule_custom():
start_time_of_day = datetime.combine(date.today(), time(9, 30, 42))
next_run_time = start_time_of_day
end_time_of_day = datetime.combine(date.today(), time(15, 0, 42))
interval = 15
sleep_secs = 60 * 5 #sleep for 5 mins
while True:
if datetime.now() >= start_time_of_day:
execute()
next_run_time = start_time_of_day + timedelta(minutes=interval)
break
while True:
if datetime.now() >= end_time_of_day:
break
elif datetime.now() >= next_run_time:
execute()
next_run_time = next_run_time + timedelta(minutes=interval)
t.sleep(sleep_secs)