m2wsgi to moduł Pythona, który zapewnia obsługi bramy WSGI serwera WWW Mongrel2, umożliwiając łatwe wdrażanie aplikacji na Mongrel2 Pythona. & Nbsp; Można również znaleźć swoje zajęcia wspierające przydatne dla rozwijania teleskopowe nie WSGI w Pythonie.
Wykorzystanie linii poleceń
Najprostszym sposobem korzystania z tego pakietu jest jako wyrzutni wiersza polecenia:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Połączy się Mongrel2 na określonym porcie życzenie i rozpocząć rozpatrywania wniosków przez przepuszczanie ich przez określony aplikacji WSGI. Domyślnie dostaniesz pojedynczą nić pracowników obsługi wszystkich żądań; zwiększyć liczbę wątków, takich jak tak:
python -m m2wsgi --num gwinty = 5 dotted.app.name tcp: //127.0.0.1: 9999
Albo, jeśli wątki nie są twoje rzeczy, użyj eventlet shuffle bity wokół tak:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Jestem zainteresowany dodając wsparcie dla innych modułów IO, takich jak gevent; składki mile widziane.
Programowa Zastosowanie
Jeśli masz bardziej skomplikowane potrzeby, można użyć m2wsgi z poziomu aplikacji. Główna klasa jest "WSGIHandler", który zapewnia prosty interfejs serwera. Odpowiednikiem użytkowania powyżej wiersza polecenia jest:
z m2wsgi.base importu WSGIHandler
Wózek = WSGIHandler (my_wsgi_app "tcp: //127.0.0.1: 9999")
handler.serve ()
Dla dokładniejszej kontroli połączenia między swoim obsługi i Mongrel2, stworzyć własny obiekt Connection:
z m2wsgi.base importu WSGIHandler, połączenie
conn = Połączenie (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")
Wózek = WSGIHandler (my_wsgi_app, conn)
handler.serve ()
Nie mamy już jedną z nich?
Kilka rzeczywistości:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Żaden z nich w pełni spełnił moje oczekiwania. W szczególności, ten pakiet ma przejrzystą obsługę:
& Nbsp; * kodowanie odpowiedzi pakietowego
& Nbsp; * "asynchroniczne przesyłanie" dużych organów życzenie
& Nbsp; * wtykowe backendy IO (np eventlet, gevent)
To także zaprojektowane od podstaw specjalnie dla Mongrel2. Oznacza to, że dostaje wiele funkcji za darmo, a kod jest prostsze i lżejsze w wyniku.
Na przykład, nie ma wyraźnego zarządzanie wątków i kolejki żądań, jak mogłoby się znaleźć w np Serwer CherryPy. Zamiast tego, po prostu zacząć się jak wiele tematów, jak trzeba, mieć je wszystkie podłączyć do tego samego gniazda modułu obsługi i mongrel2 (przez zmq) automatycznie załaduje zrównoważenie wnioski do nich.
Podobnie, nie ma wyraźne poparcie dla przeładunku, gdy kod zmienia. Wystarczy zabić starą obsługi i założyć nowy. Jeśli używasz stałe procedury obsługi następnie zmq UUID będzie upewnić się, że przekazanie dzieje wdziękiem
Wymagania .
- Python
Ograniczenia :
- Po uruchomieniu wielu wątków, Ctrl-C nie czysto zakończyć proces. Wydaje się, że wątki tła utknąć w recv blokowania ().
- Algorytm równoważenia obciążenia zmq jest chciwy round-robin, który nie jest idealny. Na przykład, może on zaplanować szereg szybkich żądania do samej nitki, jako powolne jeden, co czyni je czekać nawet jeśli inne wątki stają się dostępne. Pracuję na adapterze zmq, że można zrobić coś lepszego.
Komentarze nie znaleziono