Задать вопрос
@0Bannon

Почему запрос через тест сервер Flask не блокируется, а с gunicorn — блокируется?

Простое тестовое приложение:
from flask import Flask
import time
import os
 
app = Flask(__name__)

@app.route("/")
def index():
     print(os.getpid())
     return "home page"
 
@app.route("/test")
def test_route():
     print(os.getpid())
     time.sleep(6)
     return "test page"
 
if __name__ == '__main__':
     app.run(debug=True)

При запуске со стандартный тестовым werkzeug сервером отправляю запрос "/test" чтобы "подвесить" запрос на некоторое время, затем сразу "/" запрос на домашнюю страницу. В итоге "/" запрос отрабатывает сразу же, асинхронно, хотя выдается один и тот же `pid` процесса.
Когда же запускаю с помощью gunicorn, например, с 1 воркером, то после "/test" запроса, запрос на "/" висит, и ждет, пока "/test" отработает.
Собственно, вопрос, почему в случае тестового сервера запросы сразу отрабатывают, а в случае с gunicorn и 1 воркером - один запрос блокирует второй? Это сам werkzeug сервер так устроен?
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@0Bannon Автор вопроса
В общем, как обычно, после долгих поисков, стоит только создать тему, и находишь ответ сам.
У "app" есть параметр 'threaded', который п умолчанию выставлен в True. Если его сделать 'False', то тестовый сервер будет блокировать запросы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
В итоге "/" запрос отрабатывает сразу же, асинхронно
не, тут нет "асинхронно". Надо разбираться с какими параметрами запускается тестовый, может там несколько потоков или процессов. На самом деле, пофиг какие плюшки у тестового сервера, он не для прода, главное разобраться, как работает именно прод окружение.

а в случае с gunicorn и 1 воркером - один запрос блокирует второй?
ну логично, тут явно указан один 1 воркер, все запросы будут последовательно по одному обрабатываться.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы