2012-06-09 23 views
17

Dopo molte ricerche e googling sto tornando al pozzo. Ho Django 1.4 e sto cercando un funzionante funzionante per capire come far funzionare Django con gevent. Mi piace il framwork di Django ma ho bisogno di gestire lunghi sondaggi. Ho già un server funzionante che usa gevent su se stesso che gestisce lunghe richieste di polling e lo streaming di immagini tramite http a circa 10 fotogrammi al secondo. Mi piacerebbe utilizzare tutte le chicche di Django per fornire un quadro per questa parte.come combinare django plus gevent le basi?

Ci sono molti esempi là fuori, ma sfortunatamente nessuno di questi sembra funzionare fuori dalla scatola! Sarebbe davvero d'aiuto avere un esempio funzionante per capire come queste due cose stanno lavorando insieme.

Ecco quello che ho trovato finora ed i problemi:

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ problema: ImportError: Impossibile importare impostazioni 'webchat.settings' (E 'lo sys.path?): No module named webchat .settings

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst problema: l'installazione non riesce con il problema di permessi ottenere gevent provato ottenere manualmente dal mozzo git. L'esempio viene eseguito, ma genera questi errori quando i browser si connettono.

Queste sono informative ma non forniscono la risposta di base. 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/

Quello che spero che qualcuno può spiegare (per favore, abbastanza per favore ....) è questo: Ho un sito di base creata usando Django 1.4 - il tutorial qui https://docs.djangoproject.com/en/1.4/intro/tutorial01/ è eccellente. Quindi ora ho bisogno di capire quali modifiche apportare per poter utilizzare gevent ed essere in grado di gestire eventi asincroni. Sono sicuro che non è difficile - ho solo bisogno di qualcuno che lo capisca per spiegare cosa fare e anche cosa sta succedendo (con cose come monkey_patch).

Grazie.

risposta

20

Ecco come Corro Django con gevent + scimmia patching:

  1. Ho modificato manage.py così la prima linea (dopo la baracca) è from gevent import monkey; monkey.patch_all()

  2. Ho una nuova run_production_server script (vedi sotto).

Infine, ho configurato il mio webserver front-end per le richieste proxy alla porta 1234 (il porto che run_production_server è in ascolto).

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

Alcuni potrebbero lamentarsi del fatto che questo server non è "scala Web" sufficiente. Dubito che sarebbero in grado di fornire benchmark per dimostrarlo, ma se sei preoccupato potresti anche usare gunicorn o uwsgi per il tuo server. Ma questo funziona bene per me.

+0

Grazie per la sceneggiatura, questo è di grande aiuto. Ma, ho provato questo e penso che mi manchi qualcosa. Sto iniziando con il progetto predefinito django 1.4.Sto avviando il server con% python manage.py runserver 0.0.0.0:8000. Come utilizzo lo script che hai fornito? –

+0

Di quale parte del suo utilizzo non sei sicuro? –

+0

Mi dispiace chiedere domande stupide .... come faccio a eseguire questo script quando avviò le cose usando manage.py? Sto guardando i documenti di django wsgi in questo momento e menziona wsgi.py - è qui che dovrebbe andare la tua sceneggiatura? –