2012-06-09 23 views
17

Después de mucho buscar y buscar en Google, vuelvo al pozo. Tengo Django 1.4 y estoy buscando un decente trabajando ejemplo para averiguar cómo conseguir que Django trabaje con gevent. Me gusta la estructura de Django, pero la necesito para manejar largas encuestas. Ya tengo un servidor en funcionamiento que usa gevent por sí mismo y que maneja solicitudes de sondeo largas, así como la transmisión de imágenes a través de http a unos 10 cuadros/segundo. Me gustaría usar todas las cosas buenas en Django para proporcionar un marco para esta parte.cómo combinar django plus gevent los conceptos básicos?

Existen muchos ejemplos, pero desafortunadamente ninguno de estos parece funcionar de la caja. Realmente sería útil tener un ejemplo de trabajo para entender cómo estas dos cosas funcionan juntas.

Aquí es lo que he encontrado hasta ahora y los problemas:

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ problema: ImportError: No se pudo importar la configuración '' webchat.settings (¿Es en sys.path?): Sin módulo llamado charla electrónica .settings

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst problema: se produce el problema de permisos conseguir GEvent ha intentado conseguir manualmente desde el cubo git. El ejemplo se ejecuta, pero genera estos errores cuando los navegadores se conectan.

Estos son informativos, pero no proporcionan la respuesta básica. 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/

Lo que espero que alguien puede explicar (por favor, bastante por favor ....) es la siguiente: que tienen un sitio básico creado usando Django 1.4 - el tutorial aquí https://docs.djangoproject.com/en/1.4/intro/tutorial01/ es excelente. Así que ahora necesito entender qué cambios hacer para usar gevent y poder manejar eventos asincrónicos. Estoy seguro de que no es difícil, solo necesito que alguien que lo entienda explique qué hacer y también qué está sucediendo (con cosas como monkey_patch).

Gracias.

Respuesta

20

Así es como funciono con Django GEvent + mono parches:

  1. He modificado manage.py por lo que la primera línea (después de que el tinglado) es from gevent import monkey; monkey.patch_all()

  2. He añadido un nuevo run_production_server script (ver más abajo).

Por último, he configurado mi servidor web front-end para solicitudes de proxy a puerto 1234 (el puerto que está escuchando en 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() 

Algunos pueden quejarse de que este servidor no es lo suficientemente "web scale". Dudo que puedan proporcionar puntos de referencia para demostrarlo, pero si está preocupado, también podría usar gunicorn o uwsgi para su servidor. Pero esto funciona bien para mí.

+0

Gracias por el guión, es una gran ayuda. Pero, lo he intentado y creo que me estoy perdiendo algo. Estoy comenzando con el proyecto predeterminado django 1.4.Estoy iniciando el servidor con% python manage.py runserver 0.0.0.0:8000. ¿Cómo uso el script que me proporcionó? –

+0

¿De qué parte de su uso no está seguro? –

+0

Perdón por hacer preguntas estúpidas ... ¿cómo puedo hacer que este script se ejecute cuando empiezo a usar admin.py? Estoy mirando los documentos django wsgi ahora mismo y menciona wsgi.py - ¿es aquí donde debería ir tu script? –

Cuestiones relacionadas