Простое тестовое приложение:
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 сервер так устроен?