python / intermediate
Snippet
Streaming von Echtzeitdaten mit asynchronen Generatoren in Django Views
Django unterstützt das Streamen asynchroner Antworten mithilfe asynchroner Generatorfunktionen, die an StreamingHttpResponse übergeben werden. Dieses Muster hält Verbindungen offen, ohne Server-Worker-Threads bei Echtzeit-Datenübertragungen wie Server-Sent Events (SSE) zu blockieren.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
import asynciofrom django.http import StreamingHttpResponseasync def event_stream_generator():for i in range(1, 6):await asyncio.sleep(1)yield f"data: Event payload {i}\n\n"async def async_sse_view(request):return StreamingHttpResponse(event_stream_generator(),content_type="text/event-stream")
django
Erklärung
1
async def event_stream_generator():
Definiert eine asynchrone Generatorfunktion, die periodisch Datenpakete ausgibt.
2
await asyncio.sleep(1)
Pausiert die Ausführung asynchron, ohne die Ereignisschleife zu blockieren.
3
yield f"data: Event payload {i}\n\n"
Gibt formatierte Server-Sent-Event-Datenstrings an den Stream-Puffer aus.
4
return StreamingHttpResponse(
Erstellt eine Streaming-Antwort unter Übergabe des asynchronen Iterators und des SSE-Header-Inhaltstyps.