У меня есть написанный бот. Который отвечает на те или иные команды. По одной из команд необходимо сделать задержку ответа на несколько секунд.
Но останавливать выполнение кода нельзя. так как другие пользователи тогда тоже встанут в ожидание.
Первая мысль, которая мне пришла в голову, реализация через базу данных.
Но не хочется лишний раз ее нагружать чтоб не терять в скорости (в глубине души я надеюсь, что бот будет обрабатывать большое количество запросов).
Вторая мысль, которая ко мне пришла это реализация через словари.
То есть формируется сообщение для отправки, и записывается в словарь.
В ключ записывается дата и время отправки сообщения. И скрипт каждый цикл будет пробегать по словарю подставляя текущее дату и время. И если такой клочь есть, то получать значение этого ключа и передавать его в функцию отправки сообщений.
Накидал код реализации этого алгоритма.
Подскажите, верным путем иду? Или есть более изящное решение этой задачи?
Мне очень сильно кажется, что оно есть, и оно гораздо короче того, что я нагородил.
import datetime
def handler(message_pool): # создаем функцию обработки сообщений с отложенным временем отправки
data_time = datetime.datetime.now()
data_time = data_time.strftime("%Y.%m.%d %H:%M:%S")
for i in message_pool: # Перебираем все ключи
if i < data_time: # Сравниваем ключ с текущим временем.
print(message_pool[i]) # Выводим сообщение если условие выполнено
return False
else:
return True
'''Main.py'''
message_pool= {} # Объявляем словарь
i = 'какое-то сообщение'
if i == 'какое-то сообщение':
smg = 'Некое сообщение сформированное кодом'
data_time = datetime.datetime.now() + datetime.timedelta(seconds=4) # Получаем текущее время и дату и добавляем 4 сек
data_time=data_time.strftime("%Y.%m.%d %H:%M:%S") # Форматируем дату и время
message_pool.update({data_time : smg})
else:
pass
while handler(message_pool): # Запускаю через цикл проверку на отправку. в боте будет лежать в основном цикле.
pass