Domanda

E 'possibile ottimizzare la velocità di un'applicazione mission critical sviluppata in Django con Cython?

Di recente ho letto su internet, che Cython può trasformare un codice Python a C come la velocità. Questo è possibile con Django?

È stato utile?

Soluzione

  

E 'possibile ottimizzare la velocità di un'applicazione mission critical sviluppata in Django con Cython

E 'dubbio.

La maggior parte di un tempo di risposta di applicazioni web sono gli elementi non HTML che devono essere scaricati separatamente. La regola generale è abituale di 8 file statici per pagina HTML. (Css, js, immagini, ecc)

Dal momento che nessuno di quel contenuto statico viene da Django, la maggior parte del tempo in linea dell'applicazione web è Apache (o Nginx o qualche altro software server al di fuori Django).

Se si guarda solo il tempo per produrre il codice HTML, vi accorgerete che la maggior parte del tempo viene speso in attesa per il database (anche se è in memoria SQLite, vedrete che il database tende a dominare la timeline )

Quando si è attraverso facendo Apache e il database andare veloce, allora - e solo allora -. Si può considerare gli elementi Python

linea di fondo. Non perdete il vostro tempo a fare Django e Python andare più veloce.

Altri suggerimenti

Be ', sì, ma la maggior parte delle cose una web app non sarà in realtà non trarre beneficio da questo tipo di cambiamento se non si ha prova certa che lo farà. Profilo due volte, ottimizzare una volta.

Concettualmente che cosa siete dopo è possibile, ma si sta cercando nella direzione sbagliata.

È in realtà dovrebbe essere interessato a PyPy, che è una tecnologia estremamente promettente per il Django (e Python) della comunità. I benchmark di Django su PyPy mostrano già un 12,5X guadagno di velocità se paragonata alla normalità Python. Ora, anche se le risorse statiche di front-end possono contribuire alla maggior parte delle pagina di risposta per l'utente finale (per la risposta di S. Lott sopra), questo non affronta la realtà che guadagni di velocità sul lato server sono estremamente importanti. Facebook ha dovuto inventare HipHop PHP per questo motivo ... il ritardo di PHP non riusciva a tagliarlo. Più vicino a noi, semplicemente considerare che Meebo (un sito guidato pitone) spende decine di migliaia di dollari al mese su infrastruttura server. Ora si possono gustare i risparmi sui costi del server con PyPy? Sexy!

Controlla i parametri di riferimento: http://speed.pypy.org/

Riprendendo le altre risposte, questo è improbabile per guadagnare voi tutti i guadagni specifici, a meno che naturalmente, avete profilato un caso specifico in cui qualche beneficio potrebbe essere derivato.

L'aggiunta alle risposte, voglio sottolineare una lista di ottimizzazioni web dal web team del Yahoo. Questi sono misurate e guadagni in aree pertinenti a molti siti web e la pena di studiare dimostrato:

  

Il team Prestazioni eccezionali ha individuato una serie di best practice per rendere le pagine web veloce. L'elenco comprende 35 migliori pratiche suddivise in 7 categorie.

Abbiamo costruito un programma che viene installato sul sito del cliente chiamato InProd , gestisce la configurazione di Genesys contact center alimentati. Si tratta di un'applicazione compilata con Django Cython.

C'è un miglioramento della velocità, ma non è considerevole. Abbiamo bisogno di elaborare un sacco di richieste al secondo e il ritardo principale nel fare questo è causato dal database. I maggiori guadagni sono da effettuare con la messa a punto di database e buona sql.

È necessario avere davvero una forte necessità di fare una cosa simile come fa causa su questioni che vanno, aumenta i nostri requisiti di prova.

La differenza di prestazioni può essere di grandi dimensioni su alcuni compiti, ma non tutti. Così il miglioramento dipenderà da ciò che l'applicazione sta facendo.

Dipende se si dispone di processi pesanti sul lato backend. Nel mio caso si potrebbe migliorare uno dei processi e accelerarlo ~ 5 volte. Ho avuto una funzione che rielaborare grandi file XML che viene inputed dall'utente e salvare l'output nel database. dicendo Cython che in alcuni luoghi la stringa di input o output è fatto la velocità di 5x la magia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top