Блокировка основного потока во время выполнения функции 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