Python / Uvicorn Fundamentals Interview Questions
What is ASGI and how does it differ from WSGI?
WSGI (Web Server Gateway Interface) is the original Python standard for web servers and applications. It is synchronous - each request is handled sequentially, blocking while waiting for I/O. This makes it unsuitable for WebSockets, server-sent events, or highly concurrent async applications.
ASGI (Asynchronous Server Gateway Interface) is the modern successor - an async-native interface that supports concurrent connections, WebSockets, HTTP/2, and long-lived connections via Python's asyncio.
| Feature | WSGI | ASGI |
|---|---|---|
| Execution model | Synchronous (blocking) | Asynchronous (non-blocking) |
| WebSocket support | No | Yes |
| Long-lived connections | No | Yes |
| Python async/await | Not natively | First-class support |
| HTTP/2 | Not natively | Yes (via compatible servers) |
| Example servers | Gunicorn, uWSGI | Uvicorn, Daphne, Hypercorn |
| Example frameworks | Django, Flask | FastAPI, Starlette, Django (3.1+) |
An ASGI application is an async callable that accepts three arguments: scope (connection metadata), receive (async function to receive messages), and send (async function to send messages). This simple interface enables the server to remain decoupled from the application framework.
More Related questions...