python / intermediate
Snippet
Auslösen asynchroner Signal-Handler in Django mit asend
Django-Signale unterstützen asynchrone Handler, wenn sie mit der Methode asend ausgelöst werden. Diese Methode erwartet alle verbundenen Receiver asynchron, sodass asynchrone Aufgaben nativ ausgeführt werden können, ohne die Ereignisschleife zu blockieren.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import asynciofrom django.dispatch import Signaluser_registered = Signal()async def notify_admin(sender, **kwargs):await asyncio.sleep(0.1)print(f"Async notification sent for user: {kwargs.get('username')}")user_registered.connect(notify_admin)async def main():await user_registered.asend(sender=None, username="alex")asyncio.run(main())
django
Erklärung
1
user_registered = Signal()
Instanziiert ein benutzerdefiniertes Django Signal-Objekt.
2
async def notify_admin(sender, **kwargs):
Definiert eine asynchrone Empfängerfunktion, die await innerhalb ihres Körpers nutzen kann.
3
user_registered.connect(notify_admin)
Verbindet die asynchrone Funktion als Listener mit dem Signal.
4
await user_registered.asend(sender=None, username="alex")
Löst das Signal mit asend asynchron aus und übergibt Schlüsselwortparameter an die Empfänger.