Как сделать многопоточность в telegram боте ?

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Добрый день
Столкнулся с проблемой многопоточности, а именно
Есть бот в телеграм, но работает он в один поток, как сделать так что бы он работал в многопотоке, приведу пример:

Вот настройки шаблона, работает он постоянно ожидая новое задание

117352


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

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 595
Благодарностей
1 192
Баллы
113
Насколько помню, при каждом getupdates ответ обнуляется, в каждом ответе - только новые. Чего ждут остальные потоки?
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Бот работая в 1 поток, ждет от пользователя когда он кликнет или напишет что то боту, тогда он начинает выполнять действие
В это время все остальные отправив сообщение и кликнув на кнопку ожидают ответа, пока он не закончит предыдущую задачу.
Нужно что бы не было ожидания, а бот отвечал сразу.
Как добавить "Максимум потоков" +1 и убрать -1 поток?
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 595
Благодарностей
1 192
Баллы
113
А не проще сообщения обрабатывать по порядку, не ожидая ответа? Может, там вообще не ответят. Просто по айдишнику юзера сопоставлять, чей это ответ, например.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
А не проще сообщения обрабатывать по порядку, не ожидая ответа? Может, там вообще не ответят. Просто по айдишнику юзера сопоставлять, чей это ответ, например.
Так я и делаю
Как сделать многопоточно ?
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 595
Благодарностей
1 192
Баллы
113
Так "максимум потоков" поставь больше 1. И все. У тебя будет одновременно несколько потоков гулять.
Ну и ничего не мешает даже в рамках одного потока убрать "ожидание". Ты просто обрабатываешь по кругу все входящие сообщения, не зацикливаясь на каждом ответе. Взял сообщение, понял, что из этого надо делать и для кого (исходя из истории беседы), сделал (отправил inline-клаву или вопрос юзеру, допустим), пошел дальше по кругу (не ожидая, что тебе ответят на твое последнее действие). Скорее всего, там у тебя будет сообщение от другого юзера и вообще по другому делу, обработал его исходя из задачи. Пошел дальше.
Разве что, хорошо бы иметь "внешний" хранитель истории (условная бд), чтобы понимать, что за юзер и что было до этого (в том числе, это правильно, чтобы бот понимал, что делать, если он упал и перезапустился с чистой "историей"). Но это, в общем, и так логично делать.
ps. Можно, думаю, в рамках потока "распараллелить", но это уже чистым кодом. Но тогда возникает вопрос, зачем тут Зенка ))
 
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Проблему решил кодом установление и уменьшения кол-ва максимальных потоков:


C#:
int tmp = Convert.ToInt32(project.Variables["tmp"].Value);
var zppath = Environment.ExpandEnvironmentVariables("%ZennoPosterCurrentPath%");
var p = System.Diagnostics.Process.Start(zppath+"\\TasksRunner.exe", "-o SetThreads "+tmp+" -names Name_project");
p.WaitForExit();
tmp - переменная установки кол-во максимальных потоков для проекта Name_project

Инфу взял с этого топика https://zennolab.com/discussion/threads/kak-dobavit-1-umenshit-1-kolichestvo-potokov-v-processe-vypolnenija.42614/

Спасибо
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)