Los marcos web Python más rápidos en 2019



En 2018, Python fortaleció su popularidad entre los programadores e ingresó a los 3 idiomas más populares en github . Cada vez más personas se están moviendo hacia el lado positivo ... es decir, Python. Un número aún mayor de desarrolladores han aparecido interesados ​​en este lenguaje y están desarrollando sus proyectos con su ayuda. Una de las áreas populares para Python es el desarrollo web. Me gustaría no solo que el proceso de desarrollo sea conveniente y rápido, sino que también los proyectos en sí mismos pueden presumir de rapidez y estabilidad en el trabajo.

Python tiene muchos marcos que salvan al programador de las operaciones de rutina y le permiten concentrarse en resolver problemas. En 2018, los marcos existentes se actualizaron y aparecieron nuevas herramientas.

Por lo tanto, decidimos compilar un análisis comparativo de los marcos populares que no perderán, esperamos, su relevancia a lo largo de 2019 y determinar el más rápido de ellos.

Prueba de participantes


Django




Versión: 2.1.4
Descripción: el procesador más popular para Python, que soluciona muchos problemas (administración, autorización, registro, ORM, etc.). Esto simplifica la vida del desarrollador, pero si priorizamos la velocidad del trabajo, a veces un procesador de este tipo juega en nuestra contra y esto afecta la productividad. Por esta razón, lo más probable es que no tome el marco web más rápido de Python en la nominación de 2019.

Matraz




Versión: 1.0.2
Descripción: el framework Python más popular (incluso Django supera a las estrellas en GitHub). Una opción popular en casos de desarrollo de pequeños proyectos que no necesitan esos bollos que están en Django. Le permite implementar rápidamente la aplicación. Quizás más rápido que Django en términos de velocidad, pero tiene muy poca funcionalidad fuera de la caja.

Aiohttp




Versión: 3.5.1
Descripción: Un marco de Python asíncrono muy atractivo. Tiene una versión de cliente y servidor, lo que libera significativamente sus manos durante el desarrollo. Tiene solicitudes asíncronas muy convenientes de la versión del cliente, así como muy buenos indicadores de la velocidad del servidor con una gran cantidad de solicitudes. Definitivamente debería entrar en los tres primeros.

Sanic




Versión: 18.12
Descripción: podemos decir que este es un "Frasco de múltiples subprocesos" con todas las consecuencias. Por esta razón, creemos que los resultados deberían ser muy buenos.

Tornado




Versión: 5.1.1
Descripción: un veterano asíncrono del movimiento Python, que marcó la tendencia de la asincronía en 2010. No pierde su relevancia y recibió la quinta versión en 2018. Umbral de entrada bastante alto para principiantes. Popular entre los pitonistas de la vieja escuela, y pensamos por una buena razón. Debe mostrar buenos resultados.

Vibora




Versión probada: sin lanzamientos en GitHub
Descripción: un marco prometedor que apareció en junio de 2018 y en los últimos seis meses ha ganado más de 4000 estrellas. Tiene mediciones de rendimiento impresionantes en GitHub. Pensamos que Vibora sería el favorito de nuestra raza, pero desafortunadamente debido a la falta de la capacidad de correr bajo Python> = 3.7 y la falta de una versión estable del marco, excluimos a Vibora.
En GitHub, los desarrolladores prometen un Vibora "radicalmente nuevo" pronto. Veamos qué hacen y asegúrese de escribir al respecto.

Metodología de prueba


Las pruebas se realizaron en Apple iMac 27 '' Retina 5K 2017, CPU: 3.5GHz i5, RAM: 8GB, 1000GB Fusion Drive, OSX 10.14.2 usando la utilidad WRK :

wrk -t12 -c400 -d30s http://127.0.0.1:8080/db/ 

Las pruebas se realizaron en Python 3.7.2. Todos los marcos se lanzaron con Gunicorn con dos trabajadores. Quizás en algunos casos, el uso de uwsgi hubiera afectado los resultados, pero dado que nos propusimos probar marcos y no cómo ejecutarlos, decidimos descuidar esto.

Solo teníamos un tipo de prueba: DB Test, en la que obtenemos datos de cadena de la base de datos y los devolvemos como una respuesta html (1 entrada en 79 bytes). Postgres 11 se usó como la base de datos, Psycopg2 se utilizó como el controlador de acceso a la base de datos para frameworks síncronos y asyncpg para los asíncronos.

Las bibliotecas para marcos asincrónicos decidieron usar uvloop como un bucle de eventos.

Resultados


Solicitudes por segundo



Posiciones de liderazgo bastante esperadas por aiohttp y Sanic, pero resultados inesperados de Tornado.

Transferencia de datos por segundo (Kb)



Django está muy por detrás en la cantidad de datos transferidos por segundo.

Tiempo promedio de solicitud (ms)



Una vez más, sorprende desafortunadamente Tornado, en el que inicialmente confiamos. Impresionante es Flask, que en promedio consulta el tiempo compite con líderes potenciales.

Tiempo máximo de solicitud (seg.)



Todos los "experimentales" mostraron casi los mismos resultados para el tiempo máximo de consulta. Todo, como esperábamos.

Resultados finales


12 hilos


400 conexiones


PromedioMaxSolicitudes / seg.Transferencia / seg (KB)
Latencia (ms)Req / secLatencia (ms)Req / sec
Django147,99120,911,98640425,7178,99
Matraz186,865,651,75280546,2127,48
aiohttp165,07247,161,985851966,28439,72
Sanic194,8170,851,984701520,9292,6
Tornado279,3101,711,74272778,75222,07

Resumen


Aiohttp: líder de rendimiento a principios de 2019. Si su tarea requiere el máximo rendimiento, entonces debería echarle un vistazo más de cerca. Además, puede experimentar con las opciones de inicio de aiohttp para exprimirlo aún más. Tiene una versión de cliente que le permite realizar solicitudes asincrónicas sin bibliotecas adicionales. Por lo tanto, para implementar nuestro nuevo servicio altamente cargado, lo elegimos.

Sanic: La popularidad del marco va por delante de su rendimiento. No ocurrió un milagro y adelantar al líder no funcionó. Junto con el hilo en Reddit sobre problemas de seguridad, no usaríamos Sanic en este momento y esperamos la acción de los desarrolladores.

Tornado: "Decepción del año". En relación con los resultados, no creemos que se deba elegir Tornado para la implementación de nuevos proyectos. Esperamos que los desarrolladores encuentren algo y corrijan la situación.

Django mostró el resultado esperado. Nos encanta Django por sus características y por liberarnos de la rutina, y no por la velocidad del trabajo. Una comunidad extensa, una gran cantidad de materiales en la Web, una gran cantidad de proyectos implementados en el dominio público, todo esto lo hace atractivo para los principiantes. Si tuviéramos la tarea de desarrollar rápidamente el MVP de un servicio web típico, lo elegiríamos en 2019.

Frasco también mostró el resultado esperado. Pasó por alto Django debido al hecho de que no tiene una funcionalidad tan rica fuera de la caja. No alcancé la velocidad de los marcos asincrónicos. Lo elegiríamos en 2019 para la implementación de pequeños proyectos de mascotas o cuando la velocidad ya es importante, pero aún no existe el deseo de lidiar con marcos asincrónicos.

Puede ver todos los archivos de referencia de origen en el repositorio de referencia de Python Frameworks .

Source: https://habr.com/ru/post/440282/


All Articles