Как запланировать выполнение кода на несколько заданных параметров времени (часы, минуты)?
Мне необходимо написать код который будет работать на заданные кол-ва времени, (задаваться будет разное время (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 шт):
Я бы сделал это так:
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)