Подтвердить что ты не робот

Обрабатывать запросы на колбу одновременно с threaded = True

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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