@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()


Но я хочу, чтобы они работали вместе. Что я должен сделать, чтобы это исправить?
Большое спасибо заранее
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
febday
@febday
Очень странная логика. Но если вы объясните мне её, то я постараюсь понять

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

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

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