Блокировка основного потока во время выполнения функции register_next_step_handler

Недавно начала изучать библиотеку telebot и столкнулась с проблемой из-за асинхронного выполнения кода.

У меня есть основная функция, которая проходится по циклу и высчитывает суммарную массу продуктов. Если продукт указан в "штуках", то пользователю направляется вопрос о массе единицы товара. Далее необходимо приостановить выполнение основной функции до тех пор, пока пользователь не отправит сообщение.

При использовании register_next_step_handler код основной функции продолжает выполняться до обработки сообщения - код перепрыгивает на следующий виток цикла до получения информации от пользователя о текущем продукте.

Пыталась управлять потоками через threading и дожидаться окончания потока со считыванием сообщения с помощью .join(), но ничего не получилось. Подскажите, пожалуйста, можно ли как-то реализовать приостановку программы?

Изначальный вариант кода:

def count_mass(message, products):
    global mass
    mass = 0
    for product in products:
        if product["unit"] == "шт.":
            markup = types.ReplyKeyboardRemove()
            bot.send_message(message.chat.id, f'Введите вес ингредиента - {product["name"]} (в граммах)', reply_markup=markup)
            bot.register_next_step_handler, args=(message, weight_request)
        else:
            mass += product["amount"]
    return mass


def weight_request(message):
    global mass
    if check_num(message.text):
        bot.send_message(message.chat.id, 'Спасибо!')
        mass += product["amount"] * float(message.text)

Вариант с threading:

def count_mass(message, products):
    global mass
    mass = 0
    for product in products:
        if product["unit"] == "шт.":
            markup = types.ReplyKeyboardRemove()
            bot.send_message(message.chat.id, f'Введите вес ингредиента - {product["name"]} (в граммах)', reply_markup=markup)
            
            t = threading.Thread(target=bot.register_next_step_handler, args=(message, weight_request))
            t.start()
            t.join()

        else:
            mass += product["amount"]
    return mass

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