Как запланировать выполнение кода на несколько заданных параметров времени (часы, минуты)?

Мне необходимо написать код который будет работать на заданные кол-ва времени, (задаваться будет разное время (15:46, 17:23, 12:15)), я сделал так..., список часов, и список минут, по ним программа проверяет условие (Я использовал именно datetime чтобы не возникло ошибок с вычитанием минут (например если они меньше 3)

h_list = [15, 17, 12, 11, 16]
m_list = [46, 23, 15, 26, 41]
index_day = len(h_list)

 while True:
        now = str(datetime.datetime.now())
        now = now[11:19]
    
        for index in range(index_day):
            if now == str(datetime.timedelta(hours=h_list[index], minutes=m_list[index] - 3)):
                *#(job)*

Если ли другой способ проверки, чтобы пк не тратил большое кол-во ресурсов, для проверки каждого элемента списка?


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

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

Я бы сделал это так:

from datetime import datetime


time_list = ["11:58", "12:00", "19:45"]

while True:
    current_datetime = datetime.now()
    for i in time_list:
        if i == f'{current_datetime.hour}:{current_datetime.minute}':
            print(True)
            # Ваш алгоритм
        else:
            pass

→ Ссылка
Автор решения: Сергей

Есть schedule, есть scheduler. Советую ознакомиться с ними. Например, полезная ссылка к данной задаче: https://answacode.com/questions/11523918/python-zapusk-funkcii-v-zadannoe-vremya

А вот документация: https://schedule.readthedocs.io/en/stable/

Я бы делал так вместо вашего кода (но надо установить библиотеку https://pypi.python.org/pypi/schedule):

import schedule
import time

schedule.every().day.at("15:46").do(job)
schedule.every().day.at("17:23").do(job)
schedule.every().day.at("12:15").do(job)
schedule.every().day.at("11:26").do(job)
schedule.every().day.at("16:41").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
→ Ссылка