eventlet — зеленые потоки в веб-службе на основе django

У меня есть веб-служба, которая создает изображения из географических объектов и возвращает их на карту с помощью фреймворка django. Это мозаичный картографический сервис (TMS).

Веб-сервис вызывается через такой URL-адрес: http://host.com/TMS/map_id/x/y/z.png, где map_id, x, y и z — переменные, используемые для создания изображений.

Этот URL-адрес вызывает функцию Python, которая возвращает изображения в клиенте карты (OpenLayers). При перемещении по карте пользователь вызывает кучу запросов на этот веб-сервис, например http://host.com/tiling/1/0/1/1.png, http://host.com/tiling/1/1/0/1.png и т. д.

Я хотел бы использовать eventlet для потоковой передачи функции этого веб-сервиса, чтобы генерировать изображения параллельно, а не по одному.

Может ли кто-нибудь помочь мне в этом, предоставив подсказку о том, как прослушивать определенный URL-адрес (URL-адрес TMS) и как запускать потоки в функции. Большое спасибо.


person Below the Radar    schedule 17.12.2013    source источник
comment
Как вы развернули свой веб-сервис? Обычно браузер запрашивает сразу несколько тайлов. Если у вас более одного воркера, плитки уже должны создаваться параллельно.   -  person sk1p    schedule 18.12.2013
comment
этот веб-сервис все еще работает на локальном сервере разработки django, но я работаю над будущим развертыванием в WebFaction. Я читал, что мне нужно изменить свой сервер на eventlet.wsgi, чтобы он работал параллельно. Есть ли способ проверить, действительно ли тайлы создаются параллельно?   -  person Below the Radar    schedule 18.12.2013
comment
Любой серьезный метод развертывания допускает параллельные запросы, от gunicorn, mod_wsgi, uwsgi до fastcgi. Начиная с Django 1.4, даже сервер разработки является многопоточным. Я не знаю о WebFaction, но если у вас есть доступ к оболочке, вы можете проверить это, запустив top или htop и проверить использование доступных ядер при выполнении тестовых запросов на вашем сервере.   -  person sk1p    schedule 18.12.2013


Ответы (1)


Копия той же темы в списке рассылки Eventlet:

Самый простой способ — сменить внутренний сервер на gunicorn, spawning или eventlet.wsgi.

Все они (и, возможно, некоторые другие) умеют обслуживать каждое соединение или запрос в отдельном зеленом потоке.

Обратите внимание, что если обработка запроса привязана к процессору, зеленые потоки не помогут.

Как запустить Django на сервере eventlet.wsgi?

В Django нет ничего особенного, это обычное приложение WSGI, начиная с версии 1.4. https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/

Что теперь нужно сделать, чтобы позеленеть функцию моего веб-сервиса? Я запускаю инструмент мониторинга процессов для Windows и вижу, что на самом деле функция выполняется в одном потоке.

Вы сделали. Каждый запрос обслуживается в отдельной зеленой ветке. Зеленые потоки по определению 1 не видны вне процесса. (это означает, что инструмент мониторинга процессов также не может видеть зеленые потоки)

person temoto    schedule 19.12.2013