Обрабатывать запросы Flask одновременно с threadaded=True

Что именно делает прохождение threaded = True в app.run() делать?

Мое приложение обрабатывает ввод от пользователя, и занимает немного времени, чтобы сделать это. В течение этого времени приложение не может обрабатывать другие запросы. Я проверил свою заявку с threaded=True и это позволяет мне обрабатывать несколько запросов одновременно.

2 ответа

Решение

Начиная с Flask 1.0, сервер WSGI, входящий в состав Flask, по умолчанию работает в многопоточном режиме.

До версии 1.0 или если вы отключили многопоточность, сервер работает в однопоточном режиме и может обрабатывать только один запрос за раз. Любые параллельные запросы должны будут ждать, пока они не будут обработаны, что может привести к проблемам, если вы попытаетесь связаться с вашим собственным сервером из запроса.

С threaded=True каждый запрос обрабатывается в новом потоке. Сколько потоков ваш сервер может обрабатывать одновременно, полностью зависит от вашей ОС и того, какие ограничения он устанавливает на количество потоков на процесс. Реализация использует SocketServer.ThreadingMixIn класс, который не устанавливает ограничений на количество потоков, которые он может раскрутить.

Обратите внимание, что сервер Flask предназначен только для разработки. Это не готовый к работе сервер. Не полагайтесь на него, чтобы запустить свой сайт в более широкой сети. Вместо этого используйте подходящий WSGI-сервер, такой как gunicorn или uWSGI.

Сколько запросов мое приложение сможет обработать одновременно с этим утверждением?

Это сильно зависит от вашего приложения. Каждый новый запрос будет запускать поток - это зависит от того, сколько потоков может обработать ваша машина. Я не вижу возможности ограничить количество потоков (как предложения uwsgi в производственном развертывании).

Каковы недостатки использования этого? Если я не ожидаю более нескольких запросов одновременно, могу ли я просто продолжать использовать это?

Переключение с одного потока на многопоточный может привести к ошибкам параллелизма... если вы используете это, будьте осторожны с обработкой глобальных объектов (см. G объект в документации!) И состоянием.

Другие вопросы по тегам