@b00steer

Как сделать чтобы один State реагировал на два хендлера?

В чём заключается проблема:

Бот обращается по api к сервису, api сервиса однопоточный. Пользователь отправляет сообщение, и после бот забирает сообщение и делает по нему запрос через api.

Если ставить await message.answer("Обработка запроса...") в один хендлер с обращением к api, то получается так, что если 2 и более человек делают запрос, то "Обработка запроса" отправляется только одному из них, а второму отправляется только после выполнения api запроса первого человека.

Подумал разбить await message.answer("Обработка запроса...") и обращение к api на разные хендлеры и появилась проблема, что нужно, чтобы один State реагировал сначала на хендлер с await message.answer("Обработка запроса..."), а потом он же реагировал на запрос к api.

И я вообще не понимаю, как это реализовать, если я пытаюсь это сделать, то state обрывается на await message.answer("Обработка запроса...") и не идёт к api.
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Если это сторонний API, который не выполняет следующий запрос до завершения текущего, то бесполезно что-то у себя ковырять, всё равно пока запрос первого не будет обработан, запрос второго обрабатывать не начнёт. Тут ничего уже не поможет.

Если же проблема в том, что обращение к API делается синхронным кодом... Ну так это и надо лечить. Например, если API работает по протоколу http, то меняем библиотеку requests (или что там используется?) на aiohttp. Тогда следующий запрос может выполняться до завершения уже начатого.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы