Wiki
Web / стек

Python WSGI vs ASGI — что это и в чём разница

WSGI — синхронный интерфейс Python-сервера (Flask, Django classical). ASGI — асинхронный (FastAPI, Django-async, Starlette). Gunicorn+uvicorn — де-факто стандарт prod.

WSGI (Web Server Gateway Interface, PEP 3333) — стандарт связи между веб-сервером и Python-приложением. Синхронный: один запрос — один tread/process. Стандарт с 2003. Работают на нём Flask, Django (классически), Bottle, Pyramid.

ASGI (Asynchronous Server Gateway Interface) — асинхронный преемник, стандарт с 2019. Поддерживает WebSocket, HTTP/2, long-polling, background tasks. На нём — FastAPI, Starlette, Django 3.1+ async views, Quart, Sanic.

Application-серверы: (1) Gunicorn — самый популярный WSGI-сервер, форкается на N worker'ов. (2) uWSGI — гибче и быстрее, но переусложнён. (3) uvicorn — ASGI-сервер на uvloop, самый быстрый Python-сервер. (4) Gunicorn + uvicorn workers — гибрид (Gunicorn как supervisor, uvicorn как workers) — стандарт для FastAPI.

Практика: 4 worker'а Gunicorn на 2 vCPU держат ~500-1000 rps для среднего API. За nginx-proxy на порт 8000. `gunicorn -k uvicorn.workers.UvicornWorker -w 4 --bind 0.0.0.0:8000 app:app`. Готовый systemd-unit — в `/docs/python-deploy`.

Частые вопросы

FastAPI или Flask?
Новый проект — FastAPI (async + Pydantic + OpenAPI из коробки). Legacy или простое — Flask.
Сколько worker'ов?
Стартовая формула Gunicorn: `(2 × CPU cores) + 1`. Для async workload — 1-2 workers × N threads.

Смотрите также