pyTelegramBotAPI и threading

Код в упрощенном виде:

import threading
import telebot
from time import sleep

BOT = telebot.TeleBot("TOKEN")

def monitoring_func(chat_id):
    BOT.send_message(chat_id, 'Мониторинг включен')
    while True:
        print(f'Слежение за чатом{chat_id} работает')
        sleep(6)

@BOT.message_handler(commands=['test'])
def send_test(message):
    BOT.send_message(message.chat.id, 'TEST OK')

@BOT.message_handler(commands=['start_thread'])
def start_thread(message):
  threading.Thread(target=monitoring_func(message.chat.id)).start()

BOT.infinity_polling()

В чем суть - если я запускаю условное слежение командой /start_thread в двух чатах, то бот перестает реагировать на команды (например /test), только выполняя потоки. Если же только в одном чате запустить /start_thread, то бот работает корректно, параллельно выполняя поток и реагируя на команды. Как мне запускать потоки для произвольного количества чатов, чтобы они не блокировали бота?


Ответы (1 шт):

Автор решения: noobofthenoobs

Решил вопрос, добавив параметр num_threads с желаемым количеством потоков, оказалось что по дефолту там 2 потока на хэндлеры, которые исчерпывались:

BOT = telebot.TeleBot("TOKEN", num_threads=n)
→ Ссылка