m2wsgi é um módulo Python que fornece um manipulador de gateway WSGI para o servidor web Mongrel2, permitindo fácil implantação de aplicativos Python em Mongrel2 & nbsp;. Você também pode encontrar as suas classes de suporte útil para o desenvolvimento de manipuladores não WSGI em Python.
Uso de linha de comando
A maneira mais simples de usar este pacote é como um lançador de linha de comando:
python -m tcp m2wsgi dotted.app.name: //127.0.0.1: 9999
Isto irá ligar a Mongrel2 na porta solicitação especificada e começar o tratamento dos pedidos, passando-os através do app WSGI especificado. Por padrão, você vai ter um único segmento de trabalho lidar com todos os pedidos; aumentar o número de threads, exemplo:
python -m m2wsgi --num-threads = 5 dotted.app.name tcp: //127.0.0.1: 9999
Ou se threads não são sua coisa, use eventlet para embaralhar os bits em torno da seguinte forma:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Estou interessado em adicionar suporte para outros módulos de IO como GEvent; contribuições bem-vindos.
Programático Uso
Se você tiver necessidades mais complicadas, você pode usar m2wsgi dentro de sua aplicação. A classe principal é 'WSGIHandler ", que fornece uma interface simples servidor. O equivalente do uso acima da linha de comando é:
de m2wsgi.base WSGIHandler importação
handler = WSGIHandler (my_wsgi_app, "tcp: //127.0.0.1: 9999")
handler.serve ()
Para um controle mais preciso sobre a ligação entre o manipulador e Mongrel2, criar seu próprio objeto de conexão:
de m2wsgi.base WSGIHandler importação, Conexão
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 ()
Não temos já um destes?
Vários na verdade:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Nenhum deles totalmente satisfeitas as minhas necessidades. Em particular, este pacote tem suporte transparente para:
& Nbsp; * fragmentada codificação resposta
& Nbsp; * "carregamento assíncrono" de grandes massas de solicitação
& Nbsp; * backends IO conectáveis (eg eventlet, GEvent)
Ele também é projetado a partir do solo até especificamente para Mongrel2. Isso significa que ele recebe uma grande quantidade de funcionalidades de graça, e o código é mais simples e mais leve, como resultado.
Por exemplo, não há gestão explícita de uma fila threadpool e pedido que você pode encontrar em eg o servidor CherryPy. Em vez disso, você simplesmente iniciar tantos tópicos que você precisa, tê-los todos se conectar ao mesmo soquete do processador, e mongrel2 (via ZMQ) automaticamente irá carregar-equilibrar os pedidos a eles.
Da mesma forma, não há nenhum suporte explícito para recarregar quando o código é alterado. Basta matar o velho manipulador e iniciar um novo. Se você estiver usando UUIDs manipulador fixos então ZMQ irá garantir que a entrega acontece graciosamente
Requisitos :.
- Python
Limitações :
- Ao executar múltiplos threads, ctrl-C não limpa sair do processo. Parece que os tópicos de fundo ficar preso em um recv bloqueio ().
- O algoritmo de balanceamento de carga ZMQ é ganancioso round-robin, o que não é o ideal. Por exemplo, ele pode agendar vários pedidos rápidas para o mesmo segmento como uma lenta, fazendo-os esperar, mesmo que outros segmentos se tornam disponíveis. Eu estou trabalhando em um adaptador ZMQ que pode fazer algo melhor.
Comentários não encontrado