Одним из решений является исправление назначения «сейчас». Чтобы проверить, находится ли ваше время в массиве, вы должны обновить 'now' в l oop.
while True:
now = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if now in array_of_times:
print("Time is in")
Требуется относительно много времени, чтобы определить, находится ли текущее время в вашем массиве. так что не стоит делать что-то подобное со списком раз:
if now in array_of_times
Это потому, что он будет искать каждое значение в массиве, по одному за раз.
Следовательно, лучшее решение - установить набор времени, так как хеширование ускорит время, чтобы определить, находится ли время в массиве. Поэтому определите ваш массив следующим образом:
set_of_times = set(['2020-03-20 16:05:30', '2020-03-20 16:20:30', '2020-03-20 16:27:30', '2020-03-20 16:30:30', '2020-03-20 16:40:30', '2020-03-20 16:55:30', '2020-03-20 17:00:30', '2020-03-20 17:04:30', '2020-03-20 17:05:30', '2020-03-20 17:15:30', '2020-03-20 17:30:30', '2020-03-20 17:35:30', '2020-03-20 17:42:30', '2020-03-20 17:45:30', '2020-03-20 17:55:30', '2020-03-20 18:00:30', '2020-03-20 18:15:30', '2020-03-20 18:25:30', '2020-03-20 18:30:30', '2020-03-20 18:45:30', '2020-03-20 18:55:30', '2020-03-20 19:00:30', '2020-03-20 19:15:30', '2020-03-20 19:25:30', '2020-03-20 19:30:30', '2020-03-20 19:45:30', '2020-03-20 19:55:30', '2020-03-20 20:00:30', '2020-03-20 20:15:30', '2020-03-20 20:25:30', '2020-03-20 20:30:30', '2020-03-20 20:45:30', '2020-03-20 21:00:30', '2020-03-20 21:15:30', '2020-03-20 21:45:30', '2020-03-20 22:15:30'])
Третье альтернативное решение - если вы хотите минимизировать объем работы, выполняемой сервером, сначала отсортируйте список раз, посмотрите, как долго это займет, чтобы достигнуть в следующий раз, и использовать time.sleep
, чтобы ждать. Python time.sleep
не занят ожиданием, поэтому вы освобождаете свой процессор.
from datetime import datetime
import time
array_of_times = ['2020-03-19 22:34:00']
array_of_times.sort()
while True:
if not array_of_times:
print("No more times in array.")
break
next_time_string = array_of_times[0]
next_time = datetime.strptime(next_time_string, "%Y-%m-%d %H:%M:%S") # get the datetime from the date
del array_of_times[0] # remove the first date
time.sleep((next_time - datetime.now()).total_seconds())
# do action
print("I reached time:", next_time_string)
Вывод этого кода:
$ python test2.py
I reached time: 2020-03-19 22:34:00
No more times in array.