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

22

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

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

    
задан Harrison 10.08.2016 в 16:47
источник

2 ответа

33

Обычно сервер WSGI, включенный в Flask, запускается в однопоточном режиме и может обрабатывать только один запрос за раз. Любые параллельные запросы должны ждать, пока они не будут обработаны, что может привести к проблемам, если вы попытались обратитесь к своему собственному серверу из запроса .

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

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

    
ответ дан Martijn Pieters 10.08.2016 в 16:54
  • Единственные люди, которые будут использовать мое приложение, - это несколько избранных людей в моем офисе. Можно ли держать его в таком состоянии? –  Harrison 10.08.2016 в 16:58
  • @ Харрисон: тогда это нормально, если только эти люди не могут попытаться взломать или DDOS-машину. –  Martijn Pieters♦ 10.08.2016 в 17:06
  • Я могу полностью доверять им. Вероятность того, что несколько человек будут использовать приложение одновременно, относительно тонкая, поэтому я думаю, что пока я просто буду продолжать работать на сервере Flask. В какой момент, по вашему мнению, было бы правильным решением развернуть с использованием пушки? –  Harrison 10.08.2016 в 17:08
  • @Harrison: момент, когда вы хотите открыть его для более широкой сети, или вы чувствуете, что вам нужно лучше контролировать, сколько ресурсов вы хотите использовать на сервере. Специальный сервер WSGI может контролировать количество параллелизма, а также использовать несколько процессов для распределения нагрузки. –  Martijn Pieters♦ 10.08.2016 в 17:10
4
  

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

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

  

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

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

ответ дан Paul Becotte 10.08.2016 в 16:54
  • Хорошо, спасибо. Вы определенно прояснили это для меня. По моему вопросу, спрашивая, сколько запросов он может обрабатывать, мне просто интересно, действительно ли thread = true позволяет просто обрабатывать количество запросов с жестким кодированием x одновременно. Так это определяется моей машиной? –  Harrison 10.08.2016 в 16:57
  • Я никогда не использую dev-сервер, поэтому мой ответ не является окончательным, однако он не имеет никакого предела, установленного ... настолько бесконечным (в зависимости от системных ресурсов). Я запускаю свои приложения, используя uWSGI, у которого есть настраиваемый предел потока. –  Paul Becotte 10.08.2016 в 19:26