Как объединить django plus gevent основы?
После долгих поисков и поисковых запросов я возвращаюсь в колодец.
У меня Django 1.4, и я ищу достойный рабочий пример, чтобы выяснить, как Django работает с gevent.
Мне нравится фреймворк Django, но мне нужно, чтобы он обрабатывал длинные опросы.
У меня уже есть рабочий сервер с использованием gevent на нем, который обрабатывает длинные запросы на опрос, а также потоковое видео через http со скоростью около 10 кадров в секунду. Я хотел бы использовать все лакомства в Django, чтобы обеспечить основу для этой части.
Есть много примеров, но, к сожалению, ни один из них не работает из коробки! Это действительно помогло бы иметь рабочий пример, чтобы понять, как эти две вещи работают вместе.
Вот что я нашел до сих пор и проблемы:
http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/
проблема:
ImportError: не удалось импортировать настройки "webchat.settings" (на sys.path?): Нет модуля с именем webchat.settings
https://github.com/codysoyland/django-socketio-example/blob/master/README.rst
Проблема: установка завершается с ошибкой при получении gevent
Попробовал вручную получить его из концентратора git. Пример запускается, но генерирует эти ошибки при подключении браузеров.
Они информативны, но не дают основного ответа.
Нужна помощь в понимании кометы в Python (с Django)
https://bitbucket.org/denis/gevent/src/tip/examples/webchat/chat/views.py
http://blog.gevent.org/2009/10/10/simpler-long-polling-with-django-and-gevent/
Что я надеюсь, что кто-то может объяснить (пожалуйста, пожалуйста, пожалуйста...):
У меня есть базовый сайт, созданный с использованием Django 1.4 - учебник здесь https://docs.djangoproject.com/en/1.4/intro/tutorial01/ отлично.
Поэтому теперь мне нужно понять, какие изменения необходимо внести, чтобы использовать gevent и иметь возможность обрабатывать асинхронные события. Я уверен, что это не сложно - мне просто нужен кто-то, кто понимает это, чтобы объяснить, что делать, а также то, что происходит (с такими вещами, как monkey_patch).
Спасибо.
Ответы
Ответ 1
Вот как я запускаю Django с gevent + monkey patching:
-
Я изменил manage.py
, поэтому первая строка (после shebang) from gevent import monkey; monkey.patch_all()
-
Я добавил новый run_production_server
script (см. ниже).
Наконец, я сконфигурировал свой интерфейсный веб-сервер для запросов прокси на порт 1234
(порт, который прослушивает run_production_server
).
from gevent import monkey; monkey.patch_all()
from gevent.wsgi import WSGIServer
from django.core.management import setup_environ
import settings
setup_environ(settings)
from django.core.handlers.wsgi import WSGIHandler as DjangoWSGIApp
application = DjangoWSGIApp()
server = WSGIServer(("127.0.0.1", 1234), application)
print "Starting server on http://127.0.0.1:1234"
server.serve_forever()
Некоторые могут пожаловаться на то, что этот сервер недостаточно "веб-масштаба". Я сомневаюсь, что они смогут предоставить тесты, чтобы доказать это, но если вы беспокоитесь, вы также можете использовать gunicorn
или uwsgi
для своего сервера. Но это работает отлично для меня.