Короткий ответ
WSGI — стандартный синхронный интерфейс между Python-приложением и веб-сервером; встроенный dev-сервер однопоточен и не выдерживает нагрузку, поэтому перед приложением ставят WSGI-сервер (Gunicorn, uWSGI), умеющий управлять несколькими рабочими процессами и таймаутами.
Как это работает подробнее
WSGI описывает простой контракт — приложение это вызываемый объект application(environ, start_response); любой WSGI-совместимый сервер может обслуживать любое WSGI-совместимое приложение.
Пример кода
Команды терминала
# НЕ для production:
flask run --host=0.0.0.0
# production:
gunicorn --workers 4 --bind 0.0.0.0:8000 app:appЧто использовать на практике
- Рекомендация.
flask runудобен только для локальной разработки; в production запускаютgunicorn app:app --workers 4— несколько процессов-воркеров обрабатывают запросы через WSGI-интерфейс приложения.
Подводные камни
- Риск. запускать встроенный dev-сервер в production, игнорируя предупреждение «development server»; думать, что WSGI сам ускоряет приложение — он просто определяет интерфейс.