m2wsgi є модуль Python, який забезпечує обробник шлюзу WSGI для веб-сервера Mongrel2, що дозволяє легке розгортання Python додатків на Mongrel2 і NBSP ;. Ви також можете знайти його допоміжні класи корисні для розробки обробників без WSGI в Python.
Використання командного рядка
Найпростіший спосіб використовувати цей пакет в командному рядку пусковий:
Python -m m2wsgi dotted.app.name TCP: //127.0.0.1: 9999
Це буде підключатися до Mongrel2 на зазначеному порту запиту і почати обробку запитів, передаючи їх через вказаний WSGI програми. За замовчуванням ви отримаєте один робочий потік обробки запитів; збільшити кількість потоків таким чином:
Python -m m2wsgi --num-теми = 5 dotted.app.name TCP: //127.0.0.1: 9999
Або, якщо нитки не ваша річ, використовувати eventlet перетасувати біти навколо так:
Python -m m2wsgi --io = eventlet dotted.app.name TCP: //127.0.0.1: 9999
Я зацікавлений в додаванні підтримки для інших модулів вводу-виводу, таких як gevent; Внесок вітаються.
Програмне Використання
Якщо у вас є більш складні потреби, ви можете використовувати m2wsgi з вашого застосування. Основний клас "WSGIHandler", який забезпечує простий інтерфейс сервера. Еквівалент використання вище командного рядка:
від m2wsgi.base імпорту WSGIHandler
обробник = WSGIHandler (my_wsgi_app, "TCP: //127.0.0.1: 9999")
handler.serve ()
Для більш точного контролю над каналом зв'язку між Вашим провідником і Mongrel2, створити свій власний об'єкт з'єднання:
від m2wsgi.base імпорт WSGIHandler, зв'язку
Коннектикут = З'єднання (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")
обробник = WSGIHandler (my_wsgi_app, штат Коннектикут)
handler.serve ()
Не у нас вже є один з них?
Кілька насправді:
І NBSP; * https://github.com/berry/Mongrel2-WSGI-Handler
І NBSP; * https://bitbucket.org/dholth/mongrel2_wsgi
Жоден з них повністю не відповідав моїм потребам. Зокрема, цей пакет має прозору підтримку для:
І NBSP; * поблочного кодування відповіді
І NBSP; * "асинхронний завантаження" великих органів запитом
І NBSP; * Знімні движки IO (наприклад, eventlet, gevent)
Він також розроблений з нуля спеціально для Mongrel2. Це означає, що отримує багато функціональності безкоштовно, і код простіше і легше в результаті.
Наприклад, немає ніякого явного управління Threadpool та запиту черги, як ви могли б знайти, наприклад, в Сервер CherryPy. Замість цього, ви просто запустити стільки теми, скільки вам потрібно, щоб вони всі підключені до одного роз'єму обробника, і mongrel2 (через zmq) автоматично балансування навантаження запитів до них.
Крім того, немає ніякого явного підтримка перезавантаження при зміні коду. Просто вбити старого обробника і почати нову. Якщо ви використовуєте фіксовані UUID, обробників, то zmq буде гарантувати, що передача відбувається плавно
Вимоги :.
- Python
Обмеження
- При запуску декількох потоків, Ctrl-C не чисто вийти з процесу. Схоже, фонові теми застрягти в блокирующем RECV ().
- Алгоритм балансування навантаження zmq жодній кругової, що не є ідеальним. Наприклад, він може призначити кілька швидких запитів на тому ж потоці, повільною, що робить їх чекати, навіть якщо інші потоки стають доступними. Я працюю на zmq адаптер, який може зробити щось краще.
Коментар не знайдено