@StickPunk

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

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

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

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

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

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

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