SherAlex
@SherAlex
Game Developer

Как сделать поочерёдное выполнение запросов в Flask?

Суть приложения - отдаёт пользователю сгенерированную картинку по запросу. Генерация картинки занимает несколько секунд и использует видеокарту. При одновременных запросах видеокарта нагружается генерацией сразу нескольких картинок и функция выдаёт ошибку.

Требуется сделать так, чтобы одновременно генерировалось не большой одной картинки.

В простом телеграм боте на Telebot решил это путём организации очереди запросов. Все запросы помещались в очередь, после чего выполнялись последовательно и по готовности отправлялись пользователям. В Flask затрудняюсь реализовать подобное, так как из-за хитрых контекстов запроса просто помещать переменные request в глобально объявленную очередь не выходит.

@app.route("/url")
def fun():
    request_info = request.args.get("info")
    # ВОТ ТУТ ПОДОЖДАТЬ КОГДА ВСЕ ДРУГИЕ ЗАПРОСЫ ВЫПОЛНЯТСЯ
    image = long_time_fun_image_generator(request_info)
    return make_response(data = image)
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
@bacon
1. Выбросить flask он синхронный, организовать очередь не очень простая задача, плюс появиться очередь http запросов, которые обрабатывать синхронными фреймворками не очень весело.
2. Взять асинхронный фреймворк (например fastapi), держать очередь http запросов для них не проблема, тяжелую задача по одному запросу за раз можно выполнять с asyncio.Lock фоном или в asyncio.queue, либо в run_in_executor с ProcessPoolExecutor в 1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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