# Uvicorn — Lightning-Fast ASGI Server for Python > Uvicorn is a high-performance ASGI server built on uvloop and httptools, designed to serve async Python web frameworks like FastAPI and Starlette in production. ## Install Save as a script file and run: # Uvicorn — Lightning-Fast ASGI Server for Python ## Quick Use ```bash pip install uvicorn[standard] uvicorn myapp:app --host 0.0.0.0 --port 8000 --workers 4 ``` ## Introduction Uvicorn is an ASGI web server implementation for Python. It leverages uvloop (a fast asyncio event loop written in Cython) and httptools (a fast HTTP parser) to deliver high throughput for async frameworks like FastAPI and Starlette. ## What Uvicorn Does - Serves ASGI applications with native async/await support - Handles HTTP/1.1 and WebSocket connections out of the box - Provides hot-reload during development with the `--reload` flag - Supports multi-process mode via its own worker manager or Gunicorn integration - Delivers throughput comparable to Go and Node.js HTTP servers for async workloads ## Architecture Overview Uvicorn runs a single-threaded async event loop per worker process. Incoming connections are parsed by httptools at near-C speeds, then dispatched to the ASGI application as async callables. The uvloop backend replaces the default asyncio event loop with a libuv-based implementation for lower latency. For production multi-core utilization, Uvicorn can spawn multiple worker processes internally or run as a Gunicorn worker class. ## Self-Hosting & Configuration - Install with `pip install uvicorn[standard]` to include uvloop and httptools - Use `--workers N` to spawn multiple processes for CPU utilization - Enable `--reload` during development for automatic code reloading - Configure TLS with `--ssl-keyfile` and `--ssl-certfile` for direct HTTPS - Run behind Nginx in production for static file serving and load balancing ## Key Features - Sub-millisecond request parsing through httptools C extension - Native WebSocket support without additional dependencies - Compatible with any ASGI framework including FastAPI, Starlette, and Django 3+ - HTTP/2 support via the httptools or h2 backend - Structured logging with configurable access log formats ## Comparison with Similar Tools - **Gunicorn** — WSGI-only server that cannot serve async ASGI applications natively - **Daphne** — Django Channels ASGI server, slower throughput than Uvicorn - **Hypercorn** — ASGI server with HTTP/2 and HTTP/3 support, slightly lower throughput - **Granian** — Rust-based ASGI server aiming for higher performance - **uWSGI** — WSGI server with async protocol support but complex configuration ## FAQ **Q: Can I use Uvicorn with Django?** A: Yes. Django 3.0+ includes ASGI support. Run `uvicorn myproject.asgi:application` to serve Django via ASGI, enabling async views and WebSocket support. **Q: Should I run Uvicorn behind Gunicorn in production?** A: It is a common pattern. Use `gunicorn -k uvicorn.workers.UvicornWorker` to get Gunicorn's process management with Uvicorn's async performance. Alternatively, use Uvicorn's built-in `--workers` flag. **Q: How does Uvicorn compare to Node.js performance?** A: Benchmarks show Uvicorn with uvloop achieving throughput within 10-20% of Node.js for JSON serialization workloads, making it one of the fastest Python server options available. **Q: Does Uvicorn support HTTP/2?** A: Yes. Install the h2 package and Uvicorn can serve HTTP/2 connections, though most production deployments terminate HTTP/2 at the reverse proxy layer. ## Sources - https://github.com/encode/uvicorn - https://www.uvicorn.org --- Source: https://tokrepo.com/en/workflows/e8d3c8eb-442b-11f1-9bc6-00163e2b0d79 Author: Script Depot