Domanda

Ho usato mod_python per un po ', ho letto sempre più articoli su quanto sia buono WSGI, senza capire davvero il perché.

Quindi perché dovrei passare ad esso? Quali sono i vantaggi? È difficile e vale la curva di apprendimento?

È stato utile?

Soluzione

mod_wsgi vs. mod_python:

  • mod_wsgi è un po 'più veloce (internamente c'è più C, meno Python)
  • i processi mod_wsgi possono essere isolati da Apache, il che migliora la sicurezza / stabilità con un uso di memoria inferiore [1]
  • mod_python ti dà accesso ad alcuni interni di Apache

WSGI in generale:

  • molti middleware riutilizzabili (autenticazione / autorizzazione, elementi della sessione, memorizzazione nella cache, filtro)
  • facilità di implementazione su server Web non Apache tramite supporto WSGI nativo o flup

[1] - rispetto ad un Apache preforking, che mantiene un interprete Python separato in ogni processo

Altri suggerimenti

Per sviluppare sofisticate applicazioni Web in Python, probabilmente useresti un framework di sviluppo web più completo come DJango, Zope, Turbogears ecc. Come sviluppatore di applicazioni, non devi preoccuparti molto di WSGI. Tutto quello che devi sapere è che questi framework supportano WSGI. WSGI consente la separazione del server Web e del codice dell'applicazione Web e un amministratore di sistema può modificare il server Web purché l'applicazione Web sia conforme a WSGI. Se stai sviluppando in uno di questi framework, soddisfaresti comunque questa condizione.

Se sei uno sviluppatore di web framework (che sta sviluppando DJango o Zope stesso), allora devi capire WSGI in modo più approfondito.

La maggior parte dei framework Python implementa wsgi. C'è mod_wsgi per apache e un modulo SCGI / FastCGI / AJP + Flup per gli altri. In questo modo puoi avere tutti i vantaggi di un processo Python separato, senza essere legato a un server web.

Non dovresti dover imparare di nuovo molto, poiché la differenza dal punto di vista dello sviluppatore è solo un piccolo wrapper e una configurazione del server.

Dal punto di vista della distribuzione, la differenza è che il tuo codice python vive in un processo separato dal browser web, il che significa

a) Il processo python può essere eseguito come un altro utente rispetto al server web. Questo può essere prezioso per la sicurezza, se usato correttamente.

b) I processi del server Web non devono contenere il runtime di Python. Questo può essere di grande aiuto per le prestazioni se il server esegue molte "altre" quotazioni richieste (file statici, ecc.) e alcune richieste Python pesanti.

Quindi perché dovrei passare ad esso? Quali sono i vantaggi?

Di solito, se si dispone di un server Web come NGINX o Apache, è necessario abilitare i moduli (sebbene la configurazione dei moduli in entrambi i casi sia diversa).

WSGI è uno standard descritto su PEP 3333 e sostanzialmente fornisce un'interfaccia standard tra le applicazioni Web scritte in Python e Webservers.

Ciò significa che WSGI offre la portabilità alla tua applicazione Web Python su molti server Web diversi, senza alcuna configurazione aggiuntiva su NGINX, Apache, ecc.

Oltre a ciò, un server WSGI può offrire molte funzionalità con maggiore flessibilità, rispetto a un Web Server. Gunicorn , offre molte funzionalità come:

  • Numero di thread di lavoro per la gestione delle richieste
  • Numero massimo di client simultanei.
  • Numero massimo di connessioni in sospeso.
  • Limita la dimensione consentita di un campo di intestazione della richiesta HTTP.
  • Numero massimo di richieste che un lavoratore elaborerà prima di riavviare.

Qui è un documento completo sulle opzioni supportate da Gunicorn .

È difficile e vale la curva di apprendimento?

Come amministratore di sistema, non è necessario comprendere tutti i dettagli sullo standard, ma come sviluppatore di software, potrebbe essere necessario comprendere un po 'di più, piuttosto che semplicemente pip install gunicorn e così via .

Riferimenti

WSGI è l'API standard, che consente di scegliere il server Web e di inserire una pipeline WSGI come Repoze.

Vedi http://repoze.org/

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