Задать вопрос
@EboLiK

Как решить проблему с потоками?

Привет всем! Я пишу бота мем бота вк и у меня проблема с потоками (я честно хз, начал изучать пайтон недавно и это мой первый бот). В общем, суть проблемы такова: я пишу боту, к примеру, цифру 1, а он мне пишет "Кидай пикчу и я жмыхну ее", затем я пишу цифру два, а бот пишет сначала "Кидай пикчу и я сшакалю ее", затем пишет "Жмыхаю".

Вот как это выглядит:
61f2e955aa853689644884.png

Я вообще хз как это решить...

Вот код:
#Жмых (1)
def get_and_send_photo_1(user_id):
    for event2 in longpoll.listen():
        if event2.type == VkEventType.MESSAGE_NEW:
            if event2.to_me:
                if event2.user_id == user_id:
                    download_photo(f'{event2.user_id}', event2.message_id)
                    sender(id, 'Жмыхаю...')
                    img = obr.jmih(f'{event2.user_id}')
                    send_photo(event2.user_id)
                    delete_photo(f'{event2.user_id}')
                    break

#Шакальное фото (2)
def get_and_send_photo_2(user_id):
    for event2 in longpoll.listen():
        if event2.type == VkEventType.MESSAGE_NEW:
            if event2.to_me:
                if event2.user_id == user_id:
                    download_photo(f'{event2.user_id}', event2.message_id)
                    sender(id, 'Шакалю...')
                    img = obr.shakal(f'{event2.user_id}')
                    send_photo(event2.user_id)
                    delete_photo(f'{event2.user_id}')
                    break

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me:
        msg = event.text.lower()
        id = event.user_id

        if msg == "команды":
            sender(id, 'Вот список команд:\n1 - Жмых фото\n2 - Шакальное качество\n3 - Демотиватор\n4 - Прикол с Путиным\n5 - Мем с Конором\n6 - Страхи человека\n7 - Удаляй страницу')


        elif msg == "1":
            sender(event.user_id, 'Кинь мне пикчу и я жмыхну её...')
            rT = threading.Thread(target=get_and_send_photo_1, args=(event.user_id,))
            rT.start()
            

        elif msg == "2":
            sender(event.user_id, 'Кидай пикчу и я сшакалю качество...')
            rT = threading.Thread(target=get_and_send_photo_2, args=(event.user_id,))
            rT.start()
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
lxstvayne
@lxstvayne
Люблю Python
Ты хочешь написать обработчики на каждый поток, но это неправильно. Гораздо лучше все в одном лупе делать, а ещё лучше использовать готовые библиотеки: vk_maria, vkwave и т.д. которые предоставляют удобные обёртки для обработчиков. Также очень удобно работать с конечными автоматами.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы