Hardwsgiasgi

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

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

WSGI (PEP 3333, 2010) — synchronous interface. Один запрос — один поток/процесс. ASGI (2018) — asynchronous, поддерживает WebSockets, HTTP/2, long-lived connections. Несколько requests в одном event loop.

# WSGI — synchronous callable
def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [b'hello']

# ASGI — async callable
async def app(scope, receive, send):
    await send({'type': 'http.response.start', 'status': 200})
    await send({'type': 'http.response.body', 'body': b'hello'})
  • WSGI серверы: Gunicorn, uWSGI; ASGI: Uvicorn, Daphne, Hypercorn;
  • WSGI не может WebSockets без хаков; ASGI может;
  • Django 3.0+ имеет ASGI; Flask — WSGI; FastAPI/Starlette/Sanic — ASGI-native;
  • Production FastAPI: Gunicorn + Uvicorn workers;
  • Для high-concurrency I/O (тысячи WS connections, long polling) — ASGI выигрывает.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.