2010-08-21 9 views
24

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

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

+2

Instragram usan Django y han estado optimizando partes de su base de código con Cython: youtube.com/watch?v=_1MSX7V28Po – crhodes

Respuesta

25

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

Es dudoso.

más de un tiempo de respuesta de aplicaciones web son los elementos que no sean HTML que se deben descargar por separado. La regla general es 8 archivos estáticos por página HTML. (.CSS, .JS, images, etc.)

Dado que ninguno de esos contenidos estáticos 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 software de servidor fuera de Django).

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

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

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

+11

Esto sería correcto en la mayoría de los escenarios, alrededor del 95% donde la aplicación basada en django es principalmente CRUD. Pero si el motor de aplicaciones web necesita hacer muchos cálculos, y no solo obtener datos, aplicar filtros y regresar. En ese caso, Python se convierte en el cuello de botella, y allí uno pensaría en optimizar esta base de código o pasar a mejores (pero más duras) alternativas. –

+1

¿No se puede usar para optimizar una API de Django, ya que no tiene que servir CSS, JS, etc.? – Daniel

+0

Esto es engañoso e incorrecto, especialmente si no está sirviendo activos (lo que Python no debería hacer en una aplicación de producción). Pensé que el 95% del tiempo de una solicitud se gasta en Python, el resto en nginx y el enrutamiento. –

20

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

+15

+1: "Perfil dos veces, optimice una vez". –

5

Haciendo eco de las otras respuestas, es poco probable que obtenga ganancias específicas, a menos que, por supuesto, haya perfilado un caso específico en el que pueda obtener algún beneficio.

Agregando a las respuestas, quiero señalar una lista de optimizaciones web del equipo de la web del Yahoo. Estos se miden y ganancias en áreas aplicables a muchos sitios web y probados méritos estudiar:

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

10

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

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.5X en comparación con Python normal. Ahora, aunque los recursos estáticos frontales 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 pudo 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 infraestructura de servidor. Ahora puede probar los ahorros en los costos del servidor con PyPy? ¡Sexy!

Mira la referencia: http://speed.pypy.org/

+1

PyPy requiere mucha memoria que sigue aumentando. En este momento, una de nuestras aplicaciones comienza con 1.5 GB de RAM y en un día alcanza 3.1 GB. – Pranaysharma

3

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

Hay una mejora en la velocidad, pero no es considerable. Necesitamos procesar una gran cantidad de solicitudes por segundo y la principal demora en hacer esto es causada por la base de datos. Las mayores ganancias se lograrán con la optimización de la base de datos y un buen sql.

Necesita tener una gran necesidad de hacer algo así como lo hace con los problemas actuales, aumenta nuestros requisitos de prueba.

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

Cuestiones relacionadas