Время задержки выполнения с переходом на другой час (Python)

Не могу понять как сделать так, чтобы скрипт вставал в определенный промежуток времени. Тоесть к примеру мне нужно, чтобы цикл скрипта не выполнялся с from_minutes до to_minutes причем from_minutes может быть больше to_minutes (тоесть задержка с переходом на следующий час)

Перепробовал множество вариантов, но ни один не работает как нужно. К примеру

if isinstance(sleep_from, int) and isinstance(sleep_to, int):
    year, month, day, hour, minute, *_ = datetime.now().timetuple()
    start_sleep_time = datetime(year=year, month=month, day=day, hour=hour, minute=sleep_from)

    end_sleep_time = datetime(
        year=year, month=month, day=day, hour=hour, minute=sleep_to
    ) + timedelta(hours=int(sleep_from > sleep_to))

    while start_sleep_time < datetime.now() < end_sleep_time:
        time.sleep(.5)

В общем нужна концепция


Ответы (1 шт):

Автор решения: Namerek

Ну в общем схематично получилось вот так как-то.

from datetime import datetime, timedelta

minutes_from = 50
minutes_to = 10

current_time = datetime(2020, 10, 5, 15, 50, 0)

if __name__ == '__main__':

    year, month, day, hour, minute, *_ = current_time.timetuple()

    start_hour_shift = -int(minutes_from > minutes_to > minute)
    time_from = datetime(
        year=year, month=month, day=day, hour=hour, minute=minutes_from, second=0
    ) + timedelta(hours=start_hour_shift)
    print(time_from)

    end_hour_shift = int(minutes_from > minutes_to < minute)
    time_to = datetime(
        year=year, month=month, day=day, hour=hour, minute=minutes_to, second=0
    ) + timedelta(hours=end_hour_shift)
    print(time_to)

    while time_from <= current_time < time_to:
        print(current_time)
        current_time += timedelta(minutes=1)

Буду признателен за критику

UPD В рабочем варианте выглядит так:

def suspend(**kwargs):
    import time
    from datetime import datetime, timedelta
    minutes_from = kwargs.get('minutes_from')
    minutes_to = kwargs.get('minutes_to')
    if not ((isinstance(minutes_from, int) and 0 <= minutes_from <= 59) and (
            isinstance(minutes_to, int) and 0 <= minutes_to <= 59)):
        return

    year, month, day, hour, minute, *_ = datetime.now().timetuple()

    start_hour_shift = -int(minutes_from > minutes_to > minute)
    time_from = datetime(
        year=year, month=month, day=day, hour=hour, minute=minutes_from
    ) + timedelta(hours=start_hour_shift)

    end_hour_shift = int(minutes_from > minutes_to < minute)
    time_to = datetime(
        year=year, month=month, day=day, hour=hour, minute=minutes_to
    ) + timedelta(hours=end_hour_shift)

    while time_from <= datetime.now() < time_to:
        time.sleep(1)
→ Ссылка