Shatoidil
@Shatoidil

Почему не работает метод при запуске другого метода?

Начал изучать python на примере telegtam bot написал вот такой код

@bot.message_handler(commands=['help', 'start'])
        def send_welcome(message):
            msg = bot.send_message(message.chat.id, 'Привет! Я Bot')
            bot.get_updates
    
    bot.polling(none_stop=True, interval=0)


handler - это поступающее сообщения при запросах от пользователя. Сейчас вылавливаются команды `commands=['help', 'start']` и на них от бота следует ответ. Последняя строчка заставляет код работать постоянно.

Как только я добавляю функцию, которая постоянно пингует компьютер

def ping_Test():
        while True:
             response = subprocess.Popen(["ping", "-n", "1", "-w", "200", "192.168.0.32"]).wait()
             if response != 0:
                 bot.send_message('667252555', 'Выключен')
             time.sleep(5)
    
    ping_Test()


Возникает проблема, функция работает отлично , то есть она высылает пользаку бота сообщению , но бот перестает реагировать на команды, то есть ввожу \start и приветственное сообщение не приходит.

Как только убираю функцию, так все работает. Как заставить бота, продолжать параллельно работать?
Где я не прав?
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
JRazor
@JRazor
Senior StarkOverFlow Programmer
Запустите bot.pooling и ping_Test в разных потоках:

from threading import Thread

a = Thread(target=bot.polling, kwargs=dict(none_stop=True, interval=0))
b = Thread(target=ping_Test)

a.start()
b.start()

a.join()
b.join()

https://docs.python.org/2/library/threading.html#t...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mututunus
@mututunus
Backend developer (Python, Golang)
Бесконечный цикл в ping_Test блокирует основной поток. Читайте про GIL и асинхронность.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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