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

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

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

Ответы на вопрос(2)

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

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

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

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

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

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

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

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

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

 Uddhav Mishra29 окт. 2018 г., 12:47
я попытался использовать нитку = True для моего приложения, но когда я пытаюсь использовать, если один из потоков застрял, все приложение зависает и не доступно никому, разве это ожидаемое поведение? @Martijn Pieters
 Harrison10 авг. 2016 г., 16:58
Единственное, кто будет использовать мое приложение, это несколько человек в моем офисе. Можно ли держать его в таком состоянии?
 Martijn Pieters29 окт. 2018 г., 14:06
@ Uddhav: мне недостаточно информации, чтобы сделать какой-либо осознанный ответ, извините.
 Martijn Pieters29 окт. 2018 г., 12:51
@ Uddhav: нет, это не ожидаемое поведение. Возможно, другие потоки ожидают блокировки, которую держит замороженный поток? Если вы можете создатьминимальный воспроизводимый пример тогда, возможно, вы можете задать вопрос по этому поводу?
 absin16 авг. 2018 г., 19:28
Это обходной путь при настройке производственного сервера, после его тестирования я был весьма рад даже при уровне параллелизма 50.
 Uddhav Mishra29 окт. 2018 г., 13:01
я пытаюсь использовать оболочку Python для выполнения команд Python, когда я использую бесконечный цикл, приложение застряло, это может привести к этой проблеме? Я использую exec в Python, может ли это быть причиной, почему он застревает @MartijnPieters
 Martijn Pieters10 авг. 2016 г., 17:06
@ Харрисон: тогда это нормально, если только эти люди не попытаются взломать или DDOS вашу машину.
 Beqa Bukhradze11 июн. 2018 г., 07:57
UWSGI обрабатывает потоки? Должен ли я также сообщить app.run, что он имеет резьбу = True? или только uwsgi будет знать, чтобы запустить поток?
 Martijn Pieters11 июн. 2018 г., 14:02
 Martijn Pieters10 авг. 2016 г., 17:10
@ Харрисон: в тот момент, когда вы хотите открыть его для более широкой сети, или вы чувствуете, что вам нужно лучше контролировать, сколько ресурсов вы хотите, чтобы сервер использовал. Выделенный сервер WSGI может контролировать количество параллелизма, а также использовать несколько процессов для распределения нагрузки.
 Harrison10 авг. 2016 г., 17:08
Я могу полностью доверять им. Вероятность того, что несколько человек будут использовать приложение одновременно, относительно невелика, поэтому я думаю, что пока я просто буду поддерживать его на сервере Flask. В какой момент, по вашему мнению, было бы правильным решением развернуть использование огнестрельного оружия?

Ваш ответ на вопрос