Usando Cython con Django. ¿Tiene sentido?


¿Es posible optimizar la velocidad de una aplicación de misión crítica desarrollada en Django con Cython?

Recientemente he leído en Internet, que Cython puede convertir un código Python a C como velocidad. Es esto posible con Django?

Author: peterh, 2010-08-22

6 answers

¿Es posible optimizar la velocidad de una aplicación de misión crítica desarrollada en Django con Cython

Es dudoso.

La mayor parte del tiempo de respuesta de una aplicación web son los elementos no HTML que deben descargarse por separado. La regla general es 8 archivos estáticos por página HTML. (.CSS, .JS, imágenes, etc.)

Dado que nada de ese contenido estático proviene de Django, la mayor parte de la línea de tiempo de su aplicación web es Apache (o Nginx o algún otro servidor software fuera de Django).

Al mirar solo el tiempo para producir el HTML, encontrará que la mayor parte del tiempo se gasta esperando la base de datos (incluso si se trata de SQLite en memoria, verá que la base de datos tiende a dominar la línea de tiempo)

Cuando termines de hacer que Apache y la base de datos vayan rápido, entonces can y solo entonces can puedes considerar los elementos de Python.

Línea de fondo. No pierdas tu tiempo haciendo que Django y Python sean más rápidos.

 26
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 23:25:37

Bueno, sí, pero la mayoría de las cosas que hace una aplicación web realmente no se beneficiarán de este tipo de cambio a menos que tenga pruebas firmes de que lo hará. Perfila dos veces, optimiza una vez.

 23
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-21 21:47:51

Conceptualmente lo que buscas es posible, pero estás mirando en la dirección equivocada.

Realmente debería estar interesado en PyPy, que es una tecnología extremadamente prometedora para la comunidad de Django (y Python). Los puntos de referencia de Django en PyPy ya muestran una ganancia de velocidad 12.5 X cuando se comparan con Python normal. Ahora, a pesar de que los recursos estáticos del front-end pueden contribuir a la mayoría de la capacidad de respuesta de la página para el usuario final (según la respuesta de S. Lott anterior), esto no aborda la realidad de que las ganancias de velocidad en el lado del servidor son extremadamente importantes. Facebook tuvo que inventar HipHop PHP por esta razón...el retraso de PHP simplemente no podía cortarlo. Más cerca de casa, simplemente considere que Meebo (un sitio impulsado por python) gasta decenas de miles de dólares al mes en la infraestructura del servidor. Ahora puede probar el ahorro de costos de servidor con PyPy? ¡Sexy!

Echa un vistazo a los puntos de referencia: http://speed.pypy.org /

 10
Author: Archie1986,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-14 00:41:37

Haciéndose eco de las otras respuestas, es poco probable que esto le obtenga ganancias específicas, a menos que, por supuesto, haya perfilado un caso específico donde se podría derivar algún beneficio.

Añadiendo a las respuestas, quiero señalar una lista de optimizaciones web del equipo web de Yahoo. Estas son ganancias medidas y probadas en áreas aplicables a muchos sitios web y que vale la pena estudiar:

El Excepcional El equipo de rendimiento ha identificado una serie de mejores prácticas para hacer que las páginas web sean rápidas. La lista incluye 35 mejores prácticas divididas en 7 categorías.

 5
Author: ars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-22 01:54:34

Hemos construido una aplicación que se instala en el sitio del cliente llamada InProd, que gestiona la configuración de los contact centers de Genesys. Es una aplicación de Django compilada con Cython.

Hay una mejora de velocidad, pero no es considerable. Tenemos que procesar una gran cantidad de solicitudes por segundo y el principal retraso en hacer esto es causado por la base de datos. Las mayores ganancias se harán con el ajuste de la base de datos y un buen sql.

Usted necesita tener un realmente fuerte necesidad de hacer tal cosa, ya que causa problemas en curso, aumenta nuestros requisitos de prueba.

La diferencia de rendimiento puede ser grande en algunas tareas, pero no en todas. Por lo tanto, la mejora dependerá de lo que esté haciendo su aplicación.

 3
Author: oden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 06:25:22

Depende si tiene procesos pesados en el lado del backend. En mi caso podría mejorar uno de los procesos y acelerarlo ~5 veces. Tenía una función que reelaboraba archivos XML grandes que ingresaba el usuario y guardaba la salida en la base de datos. decirle a Cython que en algunos lugares la entrada o salida es una cadena hizo que la 5x acelerara la magia.

 0
Author: a Ro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 10:04:40