Asynchronität in Django: Wahn oder Notwendigkeit?
Asynchronie in Django ist ein recht kontroverses Thema.
Anscheinend haben die Django-Entwickler beschlossen, sich auf das Thema Asynchronität einzustellen, indem sie Django ab Version 3.1 Unterstützung für asynchrone Ansichten hinzufügen.
Typischerweise sind Entwickler sehr vorsichtig, wenn es um die Erweiterung der Kernfunktionalität von Django geht, es sei denn, es besteht ein dringender Bedarf. Das Aufkommen der Asynchronie unterstreicht nur, wie wichtig asynchrone Funktionen sind. Aber nicht alle Aufgaben eignen sich für solche Lösungen.
Warum Python Asynchronie braucht
Asynchronie war die Antwort auf langsame externe Kommunikation, relativ langsame Netzwerkverbindungen, Festplatten und andere Infrastruktur. Die Grundidee ist, dass viele Operationen asynchron ausgeführt werden können. Auf diese Weise wird die CPU-Zeit effizienter genutzt: Während einige Aufgaben auf den Abschluss von E/A-Operationen warten, arbeitet die CPU an Berechnungen, die gerade benötigt werden. Asynchronie ist ein alternatives Paradigma zu Multithreading oder Prozess-Forking.
Sachgemäß aufgebaute asynchrone Anwendungen können Tausende von Netzwerkverbindungen verarbeiten. Der asynchrone Modus eignet sich aber nur in einigen Bereichen, zum Beispiel bei Aufgaben, die CPU-Zeit für die Berechnung benötigen, wie Videocodierung oder intensive arithmetische Operationen. Python hat die Asynchronität seit Version 3.5 in Form von async/await-Anweisungen übernommen. Vor Version 3.5 wurden generatorbasierte Ansätze wie Twisted verwendet.
Der asynchrone Modus existierte schon vorher und ist gut bekannt. Für C++ ist er in dem etablierten ACE-Framework implementiert.
Probleme mit Asynchronität in Django
Django hat sich entschieden, Asynchronie zu übernehmen und stark zu fördern. Eine der langsamsten Operationen in Django ist jedoch die Arbeit mit der Datenbank. Sie ist immer noch synchron. Die Entwickler haben lediglich einen Wrapper hinzugefügt, der synchrone Datenbankaufrufe in Threads packt. So "tun" sie so, als wären sie asynchron.
Die Brücke zwischen der synchronen Datenbank und asynchronen Operationen wird durch ein Wrapping mit sync_to_async implementiert. Dieses Wrapping implementiert eine Verbindung zur Datenbank in einem eigenen Thread und wartet auf den Empfang von Daten. Dann gibt es die Abfrageergebnisse asynchron als asynchronen Iterator weiter.
Viele Leute kritisieren die Django-Entwickler für ihre Bemühungen, Asynchronität zu schaffen. Angenommen, der Architekt entscheidet, dass die Anwendungsarchitektur ein asynchrones System benötigt. In diesem Fall sollte er von Anfang an andere Frameworks wählen und Mechanismen festlegen, die von Asynchronität ausgehen, beispielsweise einen effizienten Bus auf Basis von Technologien wie AMQP oder Kafka. Django und Asynchronität sind nach wie vor umstrittene Entscheidungen bei der Entwicklung von Anwendungen.
Mit dem Aufkommen der asynchronen Unterstützung in Python, die zuvor als separate Technologien existierten (z.B. Twisted), hat der Trend zu asynchronen Frameworks begonnen.
Python-basierte asynchrone Frameworks
Die asynchrone Bibliothek in Python wird seit Version 3.4 durch das asyncio Modul implementiert und ist Teil des Sets der Standardbibliotheken. Die Bibliothek enthält alle grundlegenden Aufgaben, die zur Entwicklung asynchroner Anwendungen benötigt werden.
Diese Bibliothek ermöglicht es Entwicklern, hocheffiziente Microservices zu erstellen und den CPU-Kern optimal auszunutzen. In der Regel halten solche Microservices gerade aufgrund ihrer asynchronen Natur einer hohen Last und einer großen Anzahl gleichzeitiger Verbindungen stand. Eine Anfrage wird empfangen und an eine langsame externe Ressource, z. B. einen Bus oder eine Datenbank, gesendet, und während die externe Ressource diese Anfrage bearbeitet, werden andere Prozesse ausgeführt.
Beispielsweise gibt es heute asynchrone Python-Frameworks, die verschiedene Szenarien mit parallelen Hochlasten und stark parallelisierbaren Abfragen abdecken:
Bevor Sie die Asynchronie in Django aktivieren, sollten Sie herausfinden, ob dies wirklich die Asynchronie ist, die Sie brauchen. Wenn Sie erwarten, viele Anfragen zu verarbeiten, sollten Sie sich nach anderen geeigneten Frameworks umsehen.
Categories
Share
Benötigen Sie einen Projektkostenvoranschlag?
Schreiben Sie uns, und wir bieten Ihnen eine qualifizierte Beratung.