m2wsgi ay isang Python module na nagbibigay ng WSGI gateway na handler para sa Mongrel2 web server, na nagbibigay-daan sa madaling pag-deploy ng Python app sa Mongrel2. & Nbsp; Maaari mo ring mahanap ang pagsuporta sa mga klase nito kapaki-pakinabang para sa pagbuo ng mga di-WSGI tagapangasiwa sa Python.
Paggamit ng command-line
Ang pinakasimpleng paraan upang gamitin ang paketeng ito ay bilang isang command-line launcher:
python -m m2wsgi dotted.app.name TCP: //127.0.0.1: 9999
Ito ay kumonekta sa Mongrel2 sa tinukoy na port kahilingan at simulan ang paghawak ng mga kahilingan sa pamamagitan ng pagpapasa ng mga ito sa pamamagitan sa tinukoy na WSGI app. Sa pamamagitan ng default makakakuha ka ng isang solong manggagawa thread paghawak ng lahat ng mga kahilingan; taasan ang bilang ng mga thread tulad nito:
python -m m2wsgi --num-thread = 5 dotted.app.name TCP: //127.0.0.1: 9999
O kung thread ay hindi ang iyong bagay, gamitin eventlet upang kaladkarin ang mga paa ang mga piraso sa paligid tulad nito:
python -m m2wsgi --io = eventlet dotted.app.name TCP: //127.0.0.1: 9999
Interesado ako sa pagdagdag ng suporta para sa iba pang mga IO module tulad ng gevent; Malugod kontribusyon.
program Paggamit
Kung mayroon kang mas komplikado mga pangangailangan, maaari mong gamitin m2wsgi mula sa loob ng iyong application. Ang pangunahing klase ay 'WSGIHandler' na kung saan ay nagbibigay ng isang simpleng interface server. Ang katumbas ng paggamit sa itaas command-line ay:
mula sa pag-import m2wsgi.base WSGIHandler
handler = WSGIHandler (my_wsgi_app, "TCP: //127.0.0.1: 9999")
handler.serve ()
Para sa mas pinong kontrol sa mga koneksyon sa pagitan ng iyong handler at Mongrel2, lumikha ng iyong sariling ang koneksyon object:
mula sa pag-import m2wsgi.base WSGIHandler, Koneksyon
conn = Koneksyon (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 ()
Huwag namin na magkaroon ng isa sa mga ito?
Ilang talaga:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Wala sa mga ito ganap na natugunan ang aking mga pangangailangan. Sa partikular, ang paketeng ito ay may transparent na suporta para sa:
& Nbsp; * chunked tugon sa pag-encode
& Nbsp; * "async-upload" ng mga malalaking katawan kahilingan
& Nbsp; * pluggable IO backends (hal eventlet, gevent)
Ito ay dinisenyo din mula sa lupa partikular up para sa Mongrel2. Ang ibig sabihin nito ay nakakakuha ng maraming mga pag-andar para sa libre, at ang code ay mas simple at mas magaan bilang isang resulta.
Halimbawa, walang tahasang pamamahala ng isang threadpool at kahilingan queue bilang maaari mong makita sa hal ang CherryPy server. Sa halip, magsisimula ka na lamang ng maraming mga thread hangga't kailangan mo, mayroon ang lahat ng ito makakonekta sa parehong socket handler, at mongrel2 (sa pamamagitan ng zmq) ay awtomatikong load-balansehin ang mga kahilingan sa kanila.
Katulad nito, walang tahasang suporta para muling i-load kapag ang mga pagbabago sa code. Patayin lang ang lumang handler at simulan up ng isang bagong isa. Kung gumagamit ka ng mga nakapirming handler UUIDs pagkatapos zmq ay tinitiyak na ang sauli mangyayari malamyos
Mga Kinakailangan :.
- Python
Mga Limitasyon :
- Kapag nagpapatakbo ng maramihang mga thread, ctrl-C hindi lumabas nang malinis ang proseso. Mukhang tulad ng mga thread background makakuha ng natigil sa pag-block ng recv ().
- Ang pag-load pagbabalanse-algorithm zmq ay sakim round-Robin, na hindi perpekto. Halimbawa, maaari itong mag-iskedyul ng ilang mabilis na mga kahilingan sa parehong thread bilang isang mabagal, sa paggawa ng mga ito maghintay kahit na maging available ang iba pang mga thread. Ako ay nagtatrabaho sa isang zmq adapter na maaaring gawin ang isang bagay mas mahusay.
Mga Komento hindi natagpuan