2012-02-14 15 views
10

Possiedo un comando di gestione Django che esegue migliaia di richieste TCP/UDP. Ho usato Gevent per accelerare questo processo, in quanto ho ristrutturato il mio codice per funzionare come coroutine. Le connessioni socket non bloccano più, ma da quello che ho letto, parti di Django non sono ancora verdi. (Per verde, intendo usare i greenlet.)Making Django go green

Potrebbe dirmi quali parti di Django non sono verdi e cosa posso fare per renderle verdi? Ci sono alcune parti correlate al DB che bloccano ancora penso. Ci sono delle librerie/patch per Django che mi aiutano a renderlo verde?

Non sono troppo preoccupato del fatto che il ciclo di richiesta/risposta sia verde o no, quindi Gunicorn mi aiuterebbe?

Grazie

risposta

10

Il patcher scimmia gevent sarà patchare il libreria standard da Greenlet amichevole. Questo dovrebbe richiedere molte chiamate Django comuni.

from gevent import monkey; monkey.patch_all() 

Per quanto riguarda i database, normalmente le interfacce stanno bloccando. Se si utilizza l'aspetto di PostgreSQL su psyco_gevent per eseguire la patch scimmia psycopg2 per cooperare con gevent.

2

gevent non eseguirà il verde delle librerie di terze parti a condizione che utilizzino le estensioni C o altre librerie di terze parti che utilizzano le estensioni C. Se vengono utilizzate librerie standard, gevent è in grado di eseguire il patch delle scimmie.

Alcuni driver di database si basano ovviamente sull'implementazione del database stesso. Solo perché si utilizza una libreria verde non significa che il database si comporterà "verde". Anche questo deve essere invocato a livello di database stesso. Ad esempio, Prosgresql supporta l'elaborazione dei comandi asincroni dalla versione 2.2.

Inoltre, è possibile controllare Projects using gevent.

Gunicorn ti renderà la vita più facile, almeno quando inizi a distribuire la tua applicazione. Inoltre, durante lo sviluppo, consiglierei gunicorn (con gevent) sul normale comando django runserver, semplicemente perché può gestire le richieste simultanee in modo più veloce.