Подтвердить что ты не робот

Как объединить 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).

Спасибо.

4b9b3361

Ответ 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 для своего сервера. Но это работает отлично для меня.