
Im Jahr 2018 verstärkte Python seine Popularität unter Programmierern und stieg in die
Top 3 der beliebtesten Sprachen auf Github ein . Immer mehr Menschen bewegen sich auf die gute Seite ... das heißt Python. Eine noch größere Anzahl von Entwicklern ist erschienen, die sich für diese Sprache interessieren und mit ihrer Hilfe ihre Projekte entwickeln. Einer der beliebtesten Bereiche für Python ist die Webentwicklung. Ich möchte, dass nicht nur der Entwicklungsprozess bequem und schnell ist, sondern auch die Projekte selbst sich durch Schnelligkeit und Stabilität der Arbeit rühmen können.
Python verfügt über viele Frameworks, die den Programmierer vor Routineoperationen bewahren und es Ihnen ermöglichen, sich auf die Lösung von Problemen zu konzentrieren. Im Jahr 2018 wurden bestehende Frameworks aktualisiert und neue Tools veröffentlicht.
Aus diesem Grund haben wir uns entschlossen, eine vergleichende Analyse der gängigen Frameworks zu erstellen, die hoffentlich im Laufe des Jahres 2019 nicht an Relevanz verlieren und die schnellsten ermitteln werden.
Testteilnehmer
Version: 2.1.4
Beschreibung: Der beliebteste Prozessor für Python, der sofort viele Probleme löst (Admin-Bereich, Autorisierung, Protokollierung, ORM usw.). Dies vereinfacht das Leben des Entwicklers, aber wenn wir die Arbeitsgeschwindigkeit priorisieren, spielt manchmal ein solcher Prozessor gegen uns und dies beeinträchtigt die Produktivität. Aus diesem Grund wird er 2019 höchstwahrscheinlich nicht das Fastest Python Web Framework nominieren.
Version: 1.0.2
Beschreibung: Das beliebteste Python-Framework (sogar Django überholt die Stars auf GitHub). Eine beliebte Wahl bei der Entwicklung kleiner Projekte, bei denen die Brötchen in Django nicht benötigt werden. Ermöglicht die schnelle Bereitstellung der Anwendung. Vielleicht schneller als Django in Bezug auf die Geschwindigkeit, aber es hat sehr wenig Funktionalität aus der Box.
Version: 3.5.1
Beschreibung: Ein sehr attraktives asynchrones Python Framework. Es verfügt über eine Client- und Serverversion, die Ihre Hände während der Entwicklung erheblich entlastet. Es hat sehr bequeme asynchrone Anforderungen von der Client-Version sowie sehr gute Indikatoren für die Servergeschwindigkeit mit einer großen Anzahl von Anforderungen. Sollte auf jeden Fall in die Top Drei kommen.
Version: 18.12
Beschreibung: Wir können sagen, dass dies ein „Multithread-Kolben“ mit allen Konsequenzen ist. Aus diesem Grund sind wir der Meinung, dass die Ergebnisse sehr gut sein sollten.
Version: 5.1.1
Beschreibung: Ein asynchroner Veteran der Python-Bewegung, der 2010 den Trend der Asynchronität setzt. Es verliert nicht seine Relevanz und erhielt die 5. Version im Jahr 2018. Ziemlich hohe Einstiegsschwelle für Anfänger. Beliebt bei Pythonisten der alten Schule, und wir denken aus gutem Grund. Muss gute Ergebnisse zeigen.
Getestete Version: Keine Veröffentlichungen auf GitHub
Beschreibung: Ein vielversprechender Rahmen, der im Juni 2018 und in den letzten sechs Monaten erschien, hat mehr als 4000 Sterne erhalten. Hat beeindruckende Leistungsmessungen auf GitHub. Wir dachten, Vibora wäre der Favorit unseres Rennens, aber leider haben wir Vibora aufgrund der fehlenden Fähigkeit, unter Python> = 3.7 zu laufen, und des Fehlens einer stabilen Version des Frameworks ausgeschlossen.
Bei GitHub versprechen Entwickler bald eine „radikal neue“ Vibora. Mal sehen, was sie tun und schreiben Sie darüber.
Testmethode
Die Tests wurden auf Apple iMac 27 '' Retina 5K 2017, CPU: 3,5 GHz i5, RAM: 8 GB, 1000 GB Fusion Drive, OSX 10.14.2 mit dem Dienstprogramm
WRK durchgeführt :
wrk -t12 -c400 -d30s http://127.0.0.1:8080/db/
Tests wurden mit Python 3.7.2 durchgeführt. Alle Frameworks wurden mit
Gunicorn mit zwei Arbeitern gestartet. Vielleicht hätte in einigen Fällen die Verwendung von
uwsgi die Ergebnisse beeinflusst, aber da wir uns zum Ziel gesetzt haben, die Frameworks zu testen und nicht, wie sie ausgeführt werden sollen, haben wir beschlossen, dies zu vernachlässigen.
Wir hatten nur einen Testtyp: DB-Test, bei dem wir Zeichenfolgendaten aus der Datenbank abrufen und als HTML-Antwort zurückgeben (1 Eintrag in 79 Byte). Postgres 11 wurde als Datenbank verwendet.
Psycopg2 wurde als Datenbankzugriffstreiber für synchrone Frameworks und
asyncpg für asynchrone Frameworks verwendet.
Die Bibliotheken für asynchrone Frameworks haben beschlossen,
uvloop als Ereignisschleife zu verwenden.
Ergebnisse
Anfragen pro Sekunde

Ganz erwartete Führungspositionen von aiohttp und Sanic, aber unerwartete Ergebnisse von Tornado.
Datenübertragung pro Sekunde (Kb)

Django liegt bei der pro Sekunde übertragenen Datenmenge weit zurück.
Durchschnittliche Anforderungszeit (ms)

Wieder überrascht Tornado unangenehm, auf den wir uns zunächst verlassen haben. Beeindruckend ist Flask, das in der durchschnittlichen Abfragezeit mit potenziellen Führungskräften konkurriert.
Maximale Anforderungszeit (Sek.)

Alle "experimentellen" zeigten fast die gleichen Ergebnisse für die maximale Abfragezeit. Alles wie erwartet.
Endergebnisse
12 Fäden
400 Verbindungen
| Durchschn | Max | Anfragen / Sek | Übertragung / Sek. (KB) |
Latenz (ms) | Req / sec | Latenz (ms) | Req / sec |
Django | 147,99 | 120,91 | 1,98 | 640 | 425,71 | 78,99 |
Flasche | 186,8 | 65,65 | 1,75 | 280 | 546.2 | 127,48 |
aiohttp | 165.07 | 247.16 | 1,98 | 585 | 1966,28 | 439,72 |
Sanic | 194.8 | 170,85 | 1,98 | 470 | 1520.9 | 292.6 |
Tornado | 279.3 | 101,71 | 1,74 | 272 | 778,75 | 222.07 |
Zusammenfassung
Aiohttp: Leistungsführer zu Beginn des Jahres 2019. Wenn Ihre Aufgabe ultimative Leistung erfordert, sollten Sie sie sich genauer ansehen. Darüber hinaus können Sie mit den Startoptionen von aiohttp experimentieren, um noch mehr herauszuholen. Es verfügt über eine Client-Version, mit der Sie asynchrone Anforderungen ohne zusätzliche Bibliotheken stellen können. Um unseren neuen hoch ausgelasteten Service zu implementieren, haben wir ihn ausgewählt.
Sanic: Die Popularität des Frameworks geht seiner Leistung voraus. Ein Wunder geschah nicht und das Überholen des Führers funktionierte nicht. Zusammen mit dem Reddit-Thread zu Sicherheitsproblemen würden wir Sanic derzeit nicht verwenden und auf Maßnahmen der Entwickler warten.
Tornado: "Enttäuschung des Jahres." Im Zusammenhang mit den Ergebnissen denken wir nicht, dass Tornado für die Umsetzung neuer Projekte ausgewählt werden sollte. Wir hoffen, dass die Entwickler sich etwas einfallen lassen und die Situation korrigieren.
Django zeigte das erwartete Ergebnis. Wir lieben Django wegen seiner Eigenschaften und weil es uns von der Routine befreit und nicht wegen der Geschwindigkeit der Arbeit. Eine umfangreiche Community, eine große Anzahl von Materialien im Web, eine große Anzahl von implementierten Projekten im öffentlichen Bereich - all dies macht es für Anfänger attraktiv. Wenn wir die Aufgabe hätten, das MVP eines typischen Webdienstes schnell zu entwickeln, würden wir es 2019 wählen.
Der Kolben zeigte auch das erwartete Ergebnis. Django wurde umgangen, weil es nicht über eine so umfangreiche Funktionalität verfügt. Ich habe die Geschwindigkeit von asynchronen Frameworks nicht erreicht. Wir würden es 2019 für die Implementierung kleiner Haustierprojekte wählen oder wenn Geschwindigkeit bereits wichtig ist, aber es besteht noch kein Wunsch, sich mit asynchronen Frameworks zu befassen.
Sie können alle Quell-Benchmark-Dateien im
Python Frameworks Benchmark- Repository
anzeigen .