Телеграм бот для напоминаний. Как организовать асинхронность?

Пишу Телеграм бота для напоминаний с библиотекой pyTelegramBotAPI. Пользователь пишет боту о чем ему нужно напомнить и через какое время. Столкнулся с тем, что бот не принимает больше двух запросов. Третье сообщение обрабатывается после того, как бот выплюнет какое-то напоминание пользователю и только потом примет следующее. Думаю, что дело в многопоточности, но я не могу понять что и куда ставить и какую структуру кода мне нужно организовать. Я хочу сделать так, чтобы он мог запоминать несколько событий и, соответственно работать с более, чем одним пользователем. Подскажите как решить данный вопрос. Мой код сейчас выглядит так:

import time
from threading import Thread
import telebot
from telebot import types

bot = telebot.AsyncTeleBot('token')

users = {}
@bot.message_handler(commands=['start', 'help'])
def handle_start_help(message):
    keyboard = types.InlineKeyboardMarkup()
    start_button = types.InlineKeyboardButton(text='Начать', callback_data='LetsGo')
    keyboard.add(start_button)
    bot.send_message(message.chat.id, f'''Привет, {str(message.chat.first_name)}! 
                                          Нажми Начать''', reply_markup=keyboard)
@bot.callback_query_handler(func=lambda  call: True)
def callback_worker(call):
    if call.data == 'LetsGo':
        bot.send_message(call.message.chat.id, 'Что будем запоминать?')

@bot.message_handler(content_types=['text'])
def get_message(message):
'''Функция получения сообщения от пользователя'''
    alert = message.text
    chat_id = message.chat.id
    answer = f'{str(message.chat.first_name)}. Через сколько минут напомнить?'
    bot.send_message(message.chat.id, text=answer)
    bot.register_next_step_handler(message, get_time)
    users[chat_id] = [alert]

def get_time(message):
'''Функция получения времени задержки от пользователя'''
    timelaps = message.text
    chat_id = message.chat.id
    users[chat_id].insert(1, timelaps)
    while timelaps.isdigit() != True:
        bot.send_message(message.chat.id, 'Цифрами, пожалуйста ?')
        bot.register_next_step_handler(message, get_time)
        users[chat_id].pop() 
        break    
    else:
        check_in(message)

def check_in(message):
'''Функция задержки времени перед отправкой заметки'''
    chat_id = message.chat.id
    timelaps = users[chat_id][1]
    alert = users[chat_id][0]
    time.sleep(int(timelaps)*60)
    bot.send_message(message.chat.id, text=f'НАПОМИНАЮ: {alert}')

bot.polling(none_stop=True, timeout=20)

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

Автор решения: Kimi Iceman

Вопрос решил, использовав threading таймер: t = threading.Timer(int(timelaps)*60, check_in) t.start()

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

лучшим выбором в данном случае будет использование aiogram библиотеки, хранение времени/периодичности напоминания в БД, а для опроса бесконечный цикл в корутине с проверкой раз в минуту на совпадение времени. в Вашем случае можно сделать с помощью библиотеки threading

import threading


def notification():
    while True:
        bot.send_message()


thread = threading.Thread(target=notification)
thread.start()

Но заметьте, что решение не асинхронное. Вы запускаете отдельный поток в процессе своего приложения.

→ Ссылка