InternetMaster
@InternetMaster
Интернет

Как сделать чтобы сообщение Telegram обновлялось пока выполняется другой скрипт?

У меня есть код на telebot. Так вот, надо чтобы бот отослал сообщение и обновлял его каждую секунду, пока другой скрипт не завершится.
sek = bot.send_message(message.chat.id, '⌛ *Подождите, выполняю запрос*', parse_mode='Markdown')
sek
i = 0
while i == 0:
        time.sleep(1)
        bot.edit_message_text(chat_id=message.chat.id, message_id=sek.message_id, text='⏳ *Подождите выполняю запрос*', parse_mode='Markdown')
            time.sleep(1)
            bot.edit_message_text(chat_id=message.chat.id, message_id=sek.message_id, text='⌛ *Подождите, выполняю запрос*', parse_mode='Markdown'
api_get_den = msg
#И тут дальше скрипт который должен исполнятся.


По задумке, я использую переменную i которая по умолчанию = 0, while обновляет сообщение пока i = 0, а когда скрипт выполнится, в конце переменная i обновится на другое значение, и while перестанет работать. Но скрипт дальше не выполняется пока действует цикл while.
Это получается нежелательный цикл, как решить проблему?
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Вот тут есть раздел про асинхронную доставку сообщений. Надо либо переделать на telebot.Asynctelebot как сказано в инструкции к телеботу, либо переходить на aiogram.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Да, как ни странно, пока выполняется одна часть кода - другая не выполняется. Исключения из этого правила три:
1. Многопоточность. Каждый поток выполнения может выполнять код независимо от другого. ОС сама заставит их чередоваться, от кода почти ничего не требуется делать. Можно просто взять существующий однопоточный код, и выполнить его в другом потоке. Но проблема в том, что тогда два потока могут помешать друг другу при попытке обратиться к одним и тем же данным ("состояние гонки"). Избежать этого не совсем тривиально.
2. Многопроцессность. Почти то же самое, что и многопоточность. Имеет кое-какие плюшки, но куда сложнее в использовании.
3. Асинхронность. В этом случае одна часть кода может приостановить своё выполнение, "уступив место" другой ненадолго. Так как выполнение строго поочерёдное, то состояния гонки не будет. Но с другой стороны, обе части кода должны уметь кооперироваться друг с другом с самого начала. Это потребует полной переработки кода, так как нельзя просто "взять и прикрутить" асинхронность к существующему коду. С другой стороны, боты часто пишутся с использованием асинхронного кода, так что может потребоваться только переработать твой "рабочий" скрипт.

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

Войдите, чтобы написать ответ

Похожие вопросы