Как организовать многоканальное использование бота Telegram?
Здравствуйте.
При одновременном использовании бота разными людьми, он работает поочередно.
С начала обрабатывает запрос одного, после второго.
Если это простые команды, то этого не заметно, но есть команды, в которые прописаны скрипты для выполнения, и вот пока от этот скрипт не отработает, другую команду не захавает.
Как это можно исправить?
Бот на питоне.
Ну тут дело не в боте, а в реализации демона, который слушает соединение с ботом.
В потоке получения команды от бота делайте только дешевые операции. Например, отправляйте задания в очередь и отдельными потоками обрабатывайте задания из очереди.
Чтобы обрабатывать сообщения/команды, которые пишут пользователи боту у вас должен быть реализован некий постоянно слушающий соединение демон.
Вот этот демон у вас видимо организован в однопоточном режиме.
1. Принял команду 1
2. Выполнил команду 1
3. Принял команду 2
4. Выполнил команду 2
и т.д.
И если выполнение команды занимает длительное время, то следующая будет ждать это время.
Будет лучше если организовать например 2 демона. Первый как и сейчас будет слушать команды бота, но не выполнять их, а отправлять в очередь. А второй будет слушать появление команд в очереди и выполнять их. Так вот когда понадобится выполнять команды быстрее, просто можно создать несколько вторых демонов, которые будут в разных потоках слушать очередь и параллельно выполнять команды.
Это общая теория. Если же говорить о питоне, то копайте например в сторону модуля threading
import threading
theVar = 1
class MyThread(threading.Thread):
def run ( self ):
global theVar
def listener(messages):
@bot.message_handler(commands=['script1'])
def handle_script1_request(message):
ip = message.text.split()[-1]
result = ssh.get_script1(ip)
bot.send_message(message.chat.id, result)
theVar = theVar + 1
for x in xrange ( 20 ):
MyThread().start()
Как подогнать код под все запросы которые у меня есть для одновременного использования разным количеством людей.