@Rotyin

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

for i in range(1,string[0]+1):
        photo_url = f"Tinder/{i}/1.jpg"
        try:
            num = compare_faces(photo_url, "s.jpg")
            if num == True:
                file = open(f"Tinder/{i}/text.txt","r",encoding = "utf-8")
                caption = ''
                for i in file:
                    caption = caption + i
                file.close()
                files = open(photo_url, "rb")
                bot.send_photo(message.chat.id,files)
                bot.send_message(message.chat.id,caption)
        except Exception as e:
            print(e)

задержка происходит в этой строке:
num = compare_faces(photo_url, "s.jpg")
Функция в один конец, воращает True или False.
Как это можно ускорить?
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
  1. Само собой, напрашивается вычисление вектора face_encodings от изображения эталона лишь однократно, вынося его перед циклом.
  2. Оба вызова face_recognition.load_image_file можно сделать асинхронными с await на каждой.
    Аналогично любые другие I/O операции с файлами и функции bot.send_photo и bot.send_message по отдельности.
  3. В face_recognition.compare_faces задача вычислительная, поэтому остается создать несколько процессов согласно количеству ядер процессора минуя очередь, а результатами (вычисленными хэшами) обмениваться через pipe.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kirillinyakin
Можете использовать модуль multiprocessing модуль, в том числе использует пул процесов, чтобы не убить сервер ))
Ответ написан
Ваш ответ на вопрос

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

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