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

  • Автор темы Автор темы ErikMoor
  • Дата начала Дата начала

ErikMoor

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

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

117352


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


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/thr...chestvo-potokov-v-processe-vypolnenija.42614/

Спасибо
 

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