@StickPunk

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

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

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

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

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

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

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