Задать вопрос
@Ivan_435108

Как в телеграмм-боте запустить сразу две функции, работающие с API, одновременно?

Я создал бота. Он может выполнять некоторые команды в чате, и для работы с этой его частью я использую

def RunBot():
bot.polling(none_stop=True, interval=1, timeout=30, long_polling_timeout=65)


И есть другая часть бота, где я получаю обновления по всем входящим сообщениям (я добавил бота в чат) с помощью:

def getUpdates():
    ...
    MethodGetUpdates = f'https://api.telegram.org/bot {BOT_TOKEN}/getUpdates'
    offsetParam = {'offset': offset, 'allowed_updates': ['message']}
    response = requests.get(MethodGetUpdates, offsetParam)
    ...

(я вычисляю offset)

НО я могу заставить эти части работать только по отдельности, а не вместе. В этом проблема.

Я узнал, что можно использовать "threading", поэтому написал так:

def RunBot():
    bot.polling(none_stop=True, interval=1, timeout=30, long_polling_timeout=65)

def runScheluders():
    schedule.every(70).seconds.do (getUpdates)

if __name__ == "__main__":
     t1 = threading.Thread(target=runBot)
     t2 = threading.Thread(target=runScheluders)
     t1.start()
     t2.start()


И это не работает( В этой стадии бот отвечает на команды в чате, но getUpdates не видит новых сообщений и возвращает: '{'ok': True, 'result': []}'

А если я прокомментирую в функции 'main' t1 или t2, то оставшаяся будет работать идеально.
Например, так:

if __name__ == "__main__":
     t2 = threading.Thread(target=runScheluders)
     t2.start()


Но я хочу, чтобы они работали вместе. Что я должен сделать, чтобы это исправить?
Большое спасибо заранее
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
febday
@febday
Очень странная логика. Но если вы объясните мне её, то я постараюсь понять

А не работает у вас ничего, потому что поллинг сам по себе и есть запрос к методу getUpdates, вот только при удачном ответе от сервера полинг говорит API, что он прочитал эти апдейты и больше они ему не нужны. Я не могу в любом случае понять вашу логику, она очень странная
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽