
En 2018, Python a renforcé sa popularité auprès des programmeurs et est entré dans le
Top 3 des langues les plus populaires sur github . De plus en plus de gens se tournent vers le bon côté ... c'est-à-dire Python. Un nombre encore plus grand de développeurs sont apparus qui s'intéressent à ce langage et développent leurs projets avec son aide. L'un des domaines populaires de Python est le développement Web. Je voudrais non seulement que le processus de développement soit pratique et rapide, mais que les projets eux-mêmes puissent se vanter de la vitesse et de la stabilité du travail.
Python possède de nombreux frameworks qui sauvent le programmeur des opérations de routine et vous permettent de vous concentrer sur la résolution de problèmes. En 2018, les cadres existants ont été mis à jour et de nouveaux outils sont apparus.
Par conséquent, nous avons décidé de compiler une analyse comparative des cadres populaires qui ne perdront pas, nous l'espérons, leur pertinence tout au long de 2019 et de déterminer le plus rapide d'entre eux.
Participants aux tests
Version: 2.1.4
Description: le processeur
le plus populaire pour Python, qui à la sortie de la boîte résout de nombreux problèmes (panneau d'administration, autorisation, journalisation, ORM, etc.). Cela simplifie la vie du développeur, mais si nous priorisons la vitesse de travail, alors une telle moissonneuse-batteuse joue contre nous et cela affecte la productivité. Pour cette raison, il ne choisira probablement pas le Fastest Python Web Framework en 2019.
Version: 1.0.2
Description: le framework Python
le plus populaire (même Django dépasse les étoiles sur GitHub). Un choix populaire en cas de développement de petits projets qui n'ont pas besoin de ces petits pains qui sont à Django. Vous permet de déployer rapidement l'application. Peut-être plus rapide que Django en termes de vitesse, mais il a très peu de fonctionnalités prêtes à l'emploi.
Version: 3.5.1
Description: Un cadre Python asynchrone très attrayant. Il a une version client et serveur, ce qui libère considérablement vos mains pendant le développement. Il a des requêtes asynchrones très pratiques de la version client, ainsi que de très bons indicateurs de vitesse du serveur avec un grand nombre de requêtes. Certainement devrait entrer dans les trois premiers.
Version: 18.12
Description: on peut dire qu'il s'agit d'un «Flacon multi-fil» avec toutes les conséquences. Pour cette raison, nous pensons que les résultats devraient être très bons.
Version: 5.1.1
Description: un vétéran asynchrone du mouvement Python, fixant la tendance de l'asynchronie en 2010. Il ne perd pas de sa pertinence et a reçu la 5ème version en 2018. Seuil d'entrée assez élevé pour les débutants. Populaire parmi les pythonistes de la vieille école, et nous pensons pour une bonne raison. Doit montrer de bons résultats.
Version testée: pas de sortie sur GitHub
Description: un cadre prometteur qui est apparu en juin 2018 et au cours des six derniers mois a gagné plus de 4000 étoiles. Possède des mesures de performances impressionnantes sur GitHub. Nous pensions que Vibora serait le favori de notre course, mais malheureusement en raison du manque de capacité à fonctionner sous Python> = 3.7 et de l'absence d'une version stable du framework, nous avons exclu Vibora.
Chez GitHub, les développeurs promettent un Vibora «radicalement nouveau» bientôt. Voyons ce qu'ils font et assurez-vous d'écrire à ce sujet.
Méthodologie de test
Les tests ont été effectués sur Apple iMac 27 '' Retina 5K 2017, CPU: 3,5 GHz i5, RAM: 8 Go, Fusion Drive de 1 000 Go, OSX 10.14.2 à l'aide de l'utilitaire
WRK :
wrk -t12 -c400 -d30s http://127.0.0.1:8080/db/
Des tests ont été effectués sur Python 3.7.2. Tous les frameworks ont été lancés en utilisant
Gunicorn avec deux employés. Dans certains cas, l'utilisation d'
uwsgi aurait peut-être affecté les résultats, mais comme nous nous sommes fixé pour objectif de tester les frameworks, et non comment les exécuter, nous avons décidé de négliger cela.
Nous n'avions qu'un seul type de test: DB Test, dans lequel nous obtenons des données de chaîne de la base de données et les renvoyons sous forme de réponse html (1 entrée sur 79 octets). Postgres 11 a été utilisé comme base de données,
Psycopg2 a été utilisé comme pilote d'accès à la base de données pour les frameworks synchrones et
asyncpg pour les
frameworks asynchrones.
Les bibliothèques de frameworks asynchrones ont décidé d'utiliser
uvloop comme boucle d'événement.
Résultats
Demandes par seconde

Des positions de leadership très attendues par aiohttp et Sanic, mais des résultats inattendus de Tornado.
Transfert de données par seconde (Ko)

Django est loin derrière en termes de quantité de données transférées par seconde.
Temps moyen de demande (ms)

Surprend à nouveau désagréablement Tornado, sur laquelle nous nous sommes initialement appuyés. Impressionnant est Flask, qui en temps de requête moyen est en concurrence avec les leaders potentiels.
Temps de requête maximum (sec)

Tous les «expérimentaux» ont montré presque les mêmes résultats pour le temps de requête maximum. Tout, comme nous nous y attendions.
Résultats finaux
12 fils
400 connexions
| Moy. | Max | Demandes / sec | Transfert / s (Ko) |
Latence (ms) | Requis / sec | Latence (ms) | Requis / sec |
Django | 147,99 | 120,91 | 1,98 | 640 | 425,71 | 78,99 |
Flacon | 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 |
Tornade | 279,3 | 101,71 | 1,74 | 272 | 778,75 | 222.07 |
Résumé
Aiohttp: leader de la performance début 2019. Si votre tâche nécessite des performances ultimes, vous devriez y regarder de plus près. De plus, vous pouvez expérimenter avec les options de démarrage aiohttp pour en tirer encore plus. Il a une version client qui vous permet de faire des requêtes asynchrones sans bibliothèques supplémentaires. Par conséquent, pour mettre en œuvre notre nouveau service hautement chargé, nous l'avons choisi.
Sanic: La popularité du framework va avant ses performances. Un miracle ne s'est pas produit et dépasser le leader n'a pas fonctionné. Avec le fil sur Reddit sur les problèmes de sécurité - nous n'utiliserions pas Sanic pour le moment et attendions l'action des développeurs.
Tornade: "Déception de l'année." En ce qui concerne les résultats - nous ne pensons pas que Tornado devrait être choisi pour la mise en œuvre de nouveaux projets. Nous espérons que les développeurs trouveront quelque chose et corrigeront la situation.
Django a montré le résultat attendu. Nous aimons Django pour ses fonctionnalités et pour nous soulager de la routine, et non pour la vitesse de travail. Une communauté étendue, un grand nombre de documents sur le Web, un grand nombre de projets mis en œuvre dans le domaine public - tout cela le rend attrayant pour les débutants. Si nous avions la tâche de développer rapidement le MVP d'un service Web typique, nous le choisirions en 2019.
Flask a également montré le résultat attendu. Django contourné en raison du fait qu'il n'a pas une fonctionnalité aussi riche hors de la boîte. Je n'ai pas atteint la vitesse des frameworks asynchrones. Nous le choisirions en 2019 pour la mise en œuvre de petits projets pour animaux de compagnie ou lorsque la vitesse est déjà importante, mais nous ne souhaitons pas encore traiter de cadres asynchrones.
Vous pouvez voir tous les fichiers de référence source dans le référentiel
Python Frameworks Benchmark .