python - ¿Cómo combinar django plus gevent lo básico?
comet (1)
Después de mucho buscar y buscar en Google vuelvo al pozo. Tengo Django 1.4 y estoy buscando un ejemplo de trabajo decente para que Django trabaje con Gevent. Me gusta el marco de trabajo de Django pero lo necesito para manejar encuestas largas. Ya tengo un servidor en funcionamiento que usa gevent por sí mismo, que maneja solicitudes de sondeo largas, así como también transmite imágenes a través de http a aproximadamente 10 cuadros / segundo. Me gustaría usar todas las ventajas de Django para proporcionar un marco para esta parte.
Hay muchos ejemplos por ahí, pero desafortunadamente, ¡ninguno de estos parece funcionar fuera de la caja! Realmente ayudaría tener un ejemplo práctico para entender cómo estas dos cosas funcionan juntas.
Aquí está lo que he encontrado hasta ahora y los problemas:
http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ problem: ImportError: No se pudo importar la configuración ''webchat.settings'' (¿Está en sys.path?) : No hay módulo llamado webchat.settings
https://github.com/codysoyland/django-socketio-example/blob/master/README.rst Problema: la instalación falla con el problema del permiso para obtener gevent Intentado obtenerlo manualmente desde git hub. El ejemplo se ejecuta, pero genera estos errores cuando los navegadores se conectan.
Estos son informativos pero no proporcionan la respuesta básica. Necesita ayuda para entender Comet en Python (con 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 pueda explicar (por favor, bastante por favor ...) es esto: tengo un sitio básico creado con 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 asíncronos. Estoy seguro de que no es difícil, solo necesito a alguien que entienda lo que debe hacer y también lo que está sucediendo (con cosas como monkey_patch).
Gracias.
Así es como ejecuto Django con el parche de gevent + monkey:
He modificado
manage.py
por lo que la primera línea (después del shebang) esfrom gevent import monkey; monkey.patch_all()
from gevent import monkey; monkey.patch_all()
He agregado una nueva
run_production_server
comandosrun_production_server
(ver más abajo).
Finalmente, he configurado mi servidor web front-end para las solicitudes de proxy al puerto 1234
(el puerto en el que run_production_server
está escuchando).
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 "a escala web". Dudo que puedan proporcionar puntos de referencia para demostrarlo, pero si está preocupado, también puede usar gunicorn
o uwsgi
para su servidor. Pero esto funciona bien para mí.