Как заставить бота работать в асинхронном режиме?

Всем привет!

Недавно начала изучать создание ботов на Python.
Изучила что да как писать, чтобы бот работал.
Пишу кстати с применением библиотеки vk_api.
Все было вроде неплохо. Но..
Я заметила, что если бот выполняет что-то кроме "прослушки" сервера(в моем случае генерации картинки), то прослушка замораживается и бот отвечает уже только потом, когда картинка будет сгенерирована и отправлена пользователю. Так не годится же....
Я просмотрела некоторые библиотеки с многопоточностью и т.п Но что-то все не получалось
И вот хотелось бы спросить у вас на этот счет, что да как мне сделать.
Вот код моего проекта(оставлен необходимый минимум):
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id

token = 'ТОКЕН'
vk_session = vk_api.VkApi(token=token)

vk = vk_session.get_api()
longpool = VkBotLongPoll(vk_session, ID группы)

def create_img():
    """
код для генерации и сохранения картинки
"""

while True:
    for event in longpool.check():
        user_id = event.obj.from_id
        if event.type == VkBotEventType.MESSAGE_NEW:
            if not check_reg(event.obj.from_id):
                register_new_user(event.obj.from_id)
            response = str(event.obj.text).lower()
            if response == 'привет':
                create_img() #генерируем картинку
                upload = vk_api.Upload(vk_session)
                photo = upload.photo_messages(
                    'путь до фотографии, которую сгенерировала функция выше',
                    user_id
                )  # сохранение картинки на сервер || хранится вся информация, которую вернул сервер
                attachment = 'photo{}_{}_{}'.format(photo[0]['owner_id'], photo[0]['id'],
                                                    photo[0]['access_key'])  # создается полное название вложения
                vk.messages.send(
                    user_id=user_id,
                    message='Привет!!!',
                    attachment=attachment,
                    keyboard=create_keyboard(response, user_id),
                    random_id=get_random_id()
                )


Буду очень признательна, если поможете
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deliro
Гугли ThreadPoolExecutor / ProcessPoolExecutor, после принятия ивента закидывай ивент в пул
Ответ написан
Ваш ответ на вопрос

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

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