Время задержки выполнения с переходом на другой час (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)