m2wsgi è un modulo Python che fornisce un gestore di gateway WSGI per il server web Mongrel2, permettendo una facile implementazione di applicazioni Python su Mongrel2 & nbsp;. Si potrebbe anche trovare le sue classi di supporto utile per lo sviluppo di gestori non WSGI in Python.
Utilizzo della riga di comando
Il modo più semplice per utilizzare questo pacchetto è come un lanciatore della riga di comando:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Questo si collega al Mongrel2 sulla porta richiesta specificata e avviare la gestione delle richieste facendoli passare attraverso l'applicazione WSGI specificato. Per impostazione predefinita, si otterrà un singolo thread di lavoro la gestione di tutte le richieste; aumentare il numero di thread in questo modo:
python -m m2wsgi --num-threads = 5 dotted.app.name tcp: //127.0.0.1: 9999
O se le discussioni non sono la vostra passione, utilizzare eventlet per mescolare i bit in giro in questo modo:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Sono interessato ad aggiungere il supporto per altri moduli IO quali gevent; contributi benvenuto.
Programmatico Uso
Se avete esigenze più complesse, è possibile utilizzare m2wsgi dall'interno dell'applicazione. La classe principale è 'WSGIHandler' che fornisce una semplice interfaccia server. L'equivalente di utilizzo sopra della riga di comando è:
da m2wsgi.base WSGIHandler import
handler = WSGIHandler (my_wsgi_app, "tcp: //127.0.0.1: 9999")
handler.serve ()
Per un controllo più fine sulla connessione tra il gestore e il Mongrel2, creare il proprio oggetto Connection:
da m2wsgi.base WSGIHandler importazione, Connection
conn = Connection (send_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; recv_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; send_ident = "9a5eee79-dbd5-4f33-8fd0-69b304c6035a")
handler = WSGIHandler (my_wsgi_app, conn)
handler.serve ()
Non abbiamo già uno di questi?
Diversi realtà:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Nessuno di loro pienamente soddisfatto le mie esigenze. In particolare, questo pacchetto ha il supporto trasparente per:
& Nbsp; * la codifica risposta Chunked
& Nbsp; * "caricamento asincrono" di grandi corpi di richiesta
& Nbsp; * backend IO pluggable (es eventlet, gevent)
È stato inoltre progettato da zero appositamente per Mongrel2. Ciò significa che diventa un sacco di funzionalità per libero, e il codice è più semplice e più leggera di conseguenza.
Per esempio, non vi è alcuna gestione esplicita di un ThreadPool e richiesta di coda come si potrebbe trovare in pe il server CherryPy. Invece, si può lanciare come tanti fili di cui hai bisogno, hanno tutti la connessione alla stessa presa handler, e mongrel2 (via ZMQ) sarà automaticamente il bilanciamento del carico delle richieste a loro.
Allo stesso modo, non c'è alcun supporto esplicito per la ricarica quando il codice cambia. Basta uccidere il vecchio gestore e avviare una nuova. Se stai usando UUID del gestore fisso allora ZMQ farà in modo che il passaggio di consegne avviene con grazia
Requisiti :.
- Python
Limitazioni :
- Durante l'esecuzione di più thread, ctrl-C non pulito uscire dal processo. Sembra che i thread in background rimanere bloccati in una recv blocco ().
- L'algoritmo di bilanciamento del carico ZMQ è avido round-robin, che non è l'ideale. Ad esempio, è possibile pianificare diverse richieste veloci stesso thread uno lento, rendendoli aspettare anche se altri thread diventano disponibili. Sto lavorando su un adattatore ZMQ che può fare qualcosa di meglio.
I commenti non trovato