2012-06-13 9 views
18

Sto facendo uso di gevent nella mia applicazione Python (basata su Django). Tuttavia, ora mi sto chiedendo come eseguirlo in produzione. Quale server dovrei usare? Durante lo sviluppo, io uso gevent.pywsgi, ma è pronto per la produzione? Ho anche sentito parlare di gunicorn, ma ho visto alcuni bei bad benchmarks a riguardo.Come eseguire gevent in produzione

Nota: ho bisogno di SSL.

+4

Due punti su questo punto di riferimento. 1.) Il test di gunicorn usa il lavoratore di sincronizzazione predefinito non il gevent worker che stai cercando di usare. 2.) Dal sommario "Se c'è una cosa che ha reso chiaro questo benchmark è che la maggior parte dei server Web Python offre grandi prestazioni e se senti che le cose sono lente la prima cosa da guardare è davvero la tua applicazione". –

+8

Vedere la risposta a una domanda simile (http://stackoverflow.com/questions/7855343/run-web-app-with-gevent/7857201#7857201), l'autore di gevent stesso dice, in poche parole, "Usa gunicorn. " – akent

risposta

26

Gunicorn è davvero l'opzione migliore. È veloce, è scritto in puro python (che lo rende facile da implementare su servizi ospitati come Heroku) ed è ben gestito e utilizzato per una grande quantità di applicazioni web Python.

Per impostazione predefinita, Gunicorn utilizza una classe worker sincrona per servire le richieste, ma può essere facilmente configurata per utilizzare gevent semplicemente aggiungendo -k gevent al comando run.

Solo una breve nota: si dovrebbe sempre eseguire gunicorn dietro un proxy come NGINX, Varnish, ecc., In quanto ciò consentirà a gunicorn di gestire molte più richieste di quelle che potrebbe altrimenti, a causa del buffering delle risposte.

+4

Ho visto che ho bisogno di disabilitare il buffering se lo uso con gevent. Annulla i vantaggi di Nginx? – Flavien

+0

Qual è il punto di utilizzo di HTTP sul server back-end? A differenza di FastCGI, SCGI e uwsgi, HTTP non è stato progettato per la comunicazione da front-end a back-end e il suo utilizzo a tale scopo ha i suoi limiti e problemi. –

+0

Credo che non ci si debba preoccupare di usare un proxy inverso come nginx quando si usa Heroku dato che la mesh di routing lo gestisce. – dhackner