vk_api
vk_api copied to clipboard
Как обрабатывать обращения к боту VK асинхронно, чтобы пользователю не приходилось ждать, пока предыдущий получит ответ?
Сейчас мой бот в Вк обрабатывает сообщения синхронно:
- Получил сообщение от пользователя,
- Формирует для него ответ и отправляет *При этом если напишет кто-то ещё, то бот не ответит ему, пока не закончит с предыдущим пользователем.
Но мне нужно, чтобы бот получал сообщение от пользователя и сразу переходил к следующему, даже если на предыдущее сообщение, которое получил бот ответ еще на этапе формирования.
Ранее я уже задавал похожий вопрос и мне посоветовали библиотеку "multiprocessing", однако я не понимаю, каким образом её можно применить конкретно в моем случае. Вот пример того, как работает сейчас (синхронно) с использованием longpoll:
import vk_api
def main():
# Подключение по токену сообщества, создание объекта longpoll
session = vk_api.VkApi(token='xxxxxxxxxxxxxxxx')
longpoll = VkBotLongPoll(session, group_id='xxxxxxxxxxxxxxxx')
for event in longpoll.listen():
# Если получено сообщение
if (event.object.text):
# Формируем ответ
generate_response(event.object.text)
if __name__ == '__main__':
main()
Как можно сделать, чтобы эта часть кода, принимающая сообщения и формирующая ответ работала асинхронно и пользователю не приходилось ждать, пока предыдущий пользователь получит ответ?
Можно это вынести в поток. Вот моя обёртка для создания ботов, здесь я это реализовал через именной поток, вынесенный в класс.