2012-06-09 24 views
17

Po wielu poszukiwaniach i szukaniu w Google wracam do studni. Mam Django 1.4 i szukam przyzwoitego pracy przykład, aby dowiedzieć się, jak Django do pracy z gevent. Podoba mi się framwork Django, ale potrzebuję go do obsługi długiego sondowania. Mam już działający serwer wykorzystujący gevent na swoim komputerze, który obsługuje długie żądania pollingu, a także przesyła obraz strumieniowo przez http około 10 klatek na sekundę. Chciałbym wykorzystać wszystkie gadżety w Django, aby zapewnić ramy dla tej części.jak połączyć django plus gevent z podstawami?

Istnieje wiele przykładów tam, ale niestety, żaden z nich nie działa po wyjęciu z pudełka! To naprawdę pomogłoby mieć działający przykład, aby zrozumieć, jak te dwie rzeczy współpracują ze sobą.

Oto co znalazłem do tej pory i problemy:

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ problem: ImportError: nie można zaimportować ustawienia 'webchat.settings' (jest na sys.path?): Nie moduł o nazwie webchat .settings

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst problem: instalacja nie powiedzie się z problemem uzyskanie zgody gevent Wypróbowywany ręcznie uzyskanie go z piastą git. Przykład działa, ale generuje te błędy, gdy przeglądarki łączą się.

Są to informacje, ale nie zapewniają podstawowej odpowiedzi. Need help understanding Comet in Python (with 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/

Co mam nadzieję, że ktoś może wyjaśnić (proszę, bardzo proszę ....) to: mam podstawową strona stworzona przy użyciu Django 1.4 - tutorial tutaj https://docs.djangoproject.com/en/1.4/intro/tutorial01/ jest doskonała. Muszę teraz zrozumieć, jakie zmiany należy wprowadzić, aby wykorzystać gevent i móc obsłużyć zdarzenia asynchroniczne. Jestem pewien, że nie jest to trudne - potrzebuję kogoś, kto rozumie to, aby wyjaśnić, co robić, a także co się dzieje (z takimi rzeczami jak monkey_patch).

Dzięki.

Odpowiedz

20

Oto jak uruchomić Django z gevent + małpa łatania:

  1. Mam zmodyfikowanej manage.py więc pierwszą linię (po shebang) jest from gevent import monkey; monkey.patch_all()

  2. Dodałem nową run_production_server skrypt (patrz poniżej).

Wreszcie mam skonfigurowany mój front-end serwer WWW na żądania proxy do portu 1234 (port który run_production_server nasłuchuje).

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() 

Niektórzy mogą narzekać, że ten serwer nie jest wystarczająco "skalowalny". Wątpię, czy byliby w stanie przedstawić testy porównawcze, aby to udowodnić, ale jeśli się martwisz, możesz również użyć serwera gunicorn lub uwsgi. Ale to działa dobrze dla mnie.

+0

Dziękuję za scenariusz, to duża pomoc. Ale próbowałem tego i wydaje mi się, że czegoś brakuje. Zaczynam od domyślnego projektu django 1.4.Uruchamiam serwer z% python manage.py runserver 0.0.0.0:8000. Jak korzystać ze skryptu, który podałeś? –

+0

Jakiej części jego użytkowania nie jesteś pewien? –

+0

Przykro mi, że mogę zadawać głupie pytania ... w jaki sposób mogę uruchomić ten skrypt, gdy uruchamiam program za pomocą manage.py? Patrzę teraz na django wsgi docs i wspomina o wsgi.py - czy to powinien być twój skrypt? –