python / intermediate
Snippet
Asynchroner View-Handler mit zeitgleicher Aufgabenverarbeitung in Django
Django unterstützt native asynchrone Views mit Pythons async/await-Syntax. Asynchrone Views können nicht-blockierende Datenbankabfragen wie `alast()` parallel zu asynchronen externen API-Aufgaben mittels `asyncio.create_task()` ausführen, um Operationen gleichzeitig ohne Blockierung des Worker-Threads zu verarbeiten.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import asynciofrom django.http import JsonResponsefrom myapp.models import Articleasync def fetch_external_stats():await asyncio.sleep(0.1)return {"status": "ok", "latency_ms": 45}async def get_dashboard_data_view(request):latest_article = await Article.objects.alast()stats_task = asyncio.create_task(fetch_external_stats())stats = await stats_taskreturn JsonResponse({"latest_title": latest_article.title if latest_article else None,"api_stats": stats,})
django
Erklärung
1
import asyncio
Importiert Pythons standardmäßiges asynchrones I/O-Modul für die gleichzeitige Ausführung.
2
async def fetch_external_stats():
Definiert eine asynchrone Hilfsfunktion, die externe Metriken zurückgibt.
3
async def get_dashboard_data_view(request):
Definiert eine asynchrone Django-View-Handler-Funktion.
4
latest_article = await Article.objects.alast()
Wartet asynchron auf das Abrufen des letzten Datenbankeintrags über Djangos asynchrone ORM-Methode.
5
stats_task = asyncio.create_task(fetch_external_stats())
Plant das Ausführen der Coroutine auf der Event-Schleife ein.
6
stats = await stats_task
Wartet auf den Abschluss der parallelen Statistik-Aufgabe.