Вопрос с собеседования · Python

Чем WSGI отличается от ASGI?

MiddleВеб-фреймворкиDjangoFastAPIFlask
Ещё спрашивают так:
  • Что такое Gunicorn и Uvicorn?
  • Почему FastAPI асинхронный, а классический Django — нет?
Коротко

WSGI — синхронный интерфейс между веб-сервером и приложением: один запрос занимает один поток или процесс до ответа (Flask, Django). ASGI — асинхронный: приложение — корутина, один процесс обслуживает тысячи соединений через event loop, поддерживаются WebSocket и долгие соединения (FastAPI, Starlette, Django в режиме ASGI).

  • WSGI-серверы: Gunicorn, uWSGI; ASGI: Uvicorn, Hypercorn, Granian
  • Gunicorn с воркерами Uvicorn — процессы для ядер, event loop внутри каждого
  • ASGI не ускоряет CPU-код и бесполезен с блокирующими библиотеками

А ещё Число воркеров обычно около числа ядер; потоки для WSGI — при вводе-выводе

Подробно

WSGI (PEP 3333): приложение — вызываемый объект app(environ, start_response), который возвращает тело ответа. Синхронный по природе: пока обработчик ждёт базу, процесс или поток занят. Масштаб — число воркеров × потоков.

ASGI: приложение — корутина app(scope, receive, send), общается с сервером событиями. Позволяет держать WebSocket, server-sent events, долгие запросы без отдельного потока на каждый.

Развёртывание:

  • Django/Flask: gunicorn app:wsgi -w 4 --threads 8;
  • FastAPI: uvicorn app:app --workers 4 или Gunicorn с -k uvicorn.workers.UvicornWorker.

Когда ASGI действительно выигрывает: много одновременных медленных внешних вызовов, WebSocket, стриминг — и весь стек асинхронный (asyncpg, httpx). Если внутри синхронный ORM, выигрыша нет, а риск заблокировать цикл — есть.

Что хотят услышать

  • Синхронный и асинхронный интерфейс.
  • Серверы и как их запускают.
  • Когда ASGI даёт выигрыш.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗WSGI — асинхронный интерфейс с WebSocket, ASGI — синхронный
  • ✗ASGI работает только с Flask, WSGI — с FastAPI
  • ✗Uvicorn — WSGI-сервер, Gunicorn — ASGI
  • ✓WSGI — синхронный интерфейс, ASGI — асинхронный, с WebSocket

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования