Language: Python
Web
Sanic was created by Kenneth Reitz in 2016 to provide an asynchronous Python web framework capable of handling high loads efficiently. It leverages Python's `async`/`await` syntax for non-blocking request handling and has been adopted for real-time APIs and web services requiring speed.
Sanic is a Python 3.7+ web server and web framework that’s designed for fast HTTP responses using asynchronous capabilities powered by `asyncio`. It is ideal for building high-performance APIs and web applications.
pip install sanicconda install -c conda-forge sanicSanic allows defining routes with async request handlers, middleware, blueprints, and WebSocket support. It emphasizes high performance while maintaining simple and readable syntax.
from sanic import Sanic
from sanic.response import text
app = Sanic('my_app')
@app.get('/')
async def hello(request):
return text('Hello, Sanic!')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)Creates a basic Sanic app with a single GET route that responds with 'Hello, Sanic!'.
from sanic import Sanic
from sanic.response import json
app = Sanic('my_app')
@app.get('/user/<name>')
async def greet_user(request, name):
return json({'message': f'Hello, {name}!'})
app.run(host='0.0.0.0', port=8000)Defines a dynamic route that captures the `<name>` parameter from the URL and returns it in a JSON response.
from sanic import Sanic
from sanic.response import text
app = Sanic('my_app')
@app.middleware('request')
async def print_request(request):
print(f'Received request: {request.method} {request.path}')
@app.get('/')
async def hello(request):
return text('Hello, Sanic!')
app.run(host='0.0.0.0', port=8000)Demonstrates request middleware that executes before each request, logging method and path.
from sanic import Sanic, Blueprint
from sanic.response import json
bp = Blueprint('api')
@bp.get('/status')
async def status(request):
return json({'status': 'ok'})
app = Sanic('my_app')
app.blueprint(bp, url_prefix='/api')
app.run(host='0.0.0.0', port=8000)Shows how to modularize routes using Blueprints and a URL prefix.
from sanic import Sanic
from sanic.websocket import WebSocketProtocol
app = Sanic('my_app')
@app.websocket('/feed')
async def feed(request, ws):
while True:
data = await ws.recv()
await ws.send(f'Received: {data}')
app.run(host='0.0.0.0', port=8000, protocol=WebSocketProtocol)Implements a WebSocket route that echoes back messages received from the client.
Use async request handlers to leverage non-blocking performance.
Organize large applications using Blueprints for modular routing.
Use middleware for authentication, logging, and request preprocessing.
Leverage Sanic’s built-in support for HTTP/2 for improved speed.
Monitor performance using Sanic’s built-in metrics or custom logging.