@StickPunk

На чем лучше запускать сервер Flask с большой нагрузкой на CPU?

Суть в том, что на сайте есть страница, на которой запускаются вычисления, которые неплохо грузят процессор и блокируют поток. Мне нужно чтобы пока они выполняются другие части сайта не отваливались, а продолжали работу.

Пробовал gevent и eventlet в связке с gunicorn, но они либо поддерживают максимальное количество подключений равное количеству воркеров, что уже проблема. Либо если воркеров больше чем 1, то отваливается flask-socketio. Самый подходящий вариант сейчас это дефолтный threding режим и вынесение выполнения в flask-socketio start_background_task. Но, как я понимаю, в таком случае работает только 1 ядро.

Есть ли варианты как это правильно можно сделать? В документации flask-socketio нашел вариант с поднятием дополнительных экземпляров сервера и балансировкой через nginx, но оно не работает, сокеты отправляют запросы куда попало, а нужно чтобы 1 подключение оптарвляло все запросы только на 1 сервер.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 3
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Есть ли варианты как это правильно можно сделать?

Использовать Celery для выноса тяжелых задач в очередь, без блокирования основного потока Flask.
Ответ написан
AshBlade
@AshBlade
Просто хочу быть счастливым
Обычно, для CPU-bound задач подходит их вынесение в ОТДЕЛЬНЫЙ ПРОЦЕСС.
В питоне это через multiprocessing пакет (встроенный) можно сделать.
Ответ написан
Попробуйте запустить через uwsgi там можно настроить количество процессов, которые будет запускать flask и работать ему с потоками или нет. Также там можно выделить отдельный роут в отдельный воркер, так чтобы он работал изолированно от других. Возможно это то что вам нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽
14 июл. 2024, в 20:18
20000 руб./за проект
14 июл. 2024, в 20:15
10000 руб./за проект
14 июл. 2024, в 19:15
1000 руб./за проект