¿Cuál de estos marcos / bibliotecas sería la mejor opción para construir aplicaciones web multiusuario modernas? Me encantaría tener un servidor web asíncrono que me permita escalar fácilmente. ¿Qué solución proporcionará el mejor rendimiento / escalabilidad / marco más útil (en términos de fácil de usar y fácil de desarrollar)?
Sería genial si proporcionara una buena funcionalidad (websockets, rpc, transmisión, etc.).
¿Cuáles son los pros y los contras de cada solución?
Respuestas:
" Django es un marco web Python de alto nivel que fomenta el desarrollo rápido y el diseño limpio y pragmático" . Si está creando algo similar a un sitio de comercio electrónico, entonces probablemente debería ir con Django. Hará su trabajo rápido. No tiene que preocuparse por demasiadas opciones tecnológicas. Proporciona todo lo que necesita, desde el motor de plantillas hasta ORM. Será un poco obstinado sobre la forma en que estructura su aplicación, lo cual es bueno si me pregunta. Y tiene la comunidad más fuerte de todas las otras bibliotecas, lo que significa que hay ayuda fácil disponible.
" Flask es un microframework para Python basado en Werkzeug, Jinja 2 y buenas intenciones" . Cuidado: el "microframework" puede ser engañoso. Esto no significa que Flask sea una biblioteca a medio cocer. Esto significa que el núcleo del matraz es muy, muy simple. A diferencia de Django, no tomará decisiones tecnológicas por usted. Usted es libre de elegir cualquier motor de plantillas u ORM que le agrade. A pesar de que viene con el motor de plantillas Jinja de forma predeterminada, siempre puede elegir el nuestro. Hasta donde yo sé, Flask es útil para escribir puntos finales de API (servicios RESTful).
" Twisted es un motor de red controlado por eventos escrito en python" . Este es un motor de alto rendimiento. La razón principal de su velocidad es algo llamado diferido. Twisted está construido sobre diferidos. Para aquellos de ustedes que no saben acerca de los defensores, se logra el mecanismo a través de la arquitectura asincrónica. Twisted es muy rápido. Pero no es adecuado para escribir webapps convencionales. Si quieres hacer algo de redes de bajo nivel, Twisted es tu amigo.
" Tornado es un marco web de Python y una biblioteca de red asincrónica, desarrollada originalmente en FriendFeed. Al usar E / S de red sin bloqueo, Tornado puede escalar a decenas de miles de conexiones abiertas, lo que lo hace ideal para sondeos largos, WebSockets y otras aplicaciones que requieren una conexión de larga duración con cada usuario " . Tornado se encuentra en algún lugar entre Django y Flask. Si desea escribir algo con Django o Flask, pero si necesita un mejor rendimiento, puede optar por Tornado. puede manejar el problema de C10k muy bien si está diseñado correctamente.
" Cyclone es un marco de servidor web para Python que implementa la API Tornado como un protocolo Twisted" . Ahora, ¿qué pasa si quieres algo que sea casi tan eficaz como Twisted pero fácil de escribir webapps convencionales? Saluda al ciclón. Preferiría Ciclón sobre Tornado. Tiene una API que es muy similar a Tornado. De hecho, este es un tenedor de Tornado. Pero el problema es que tiene una comunidad relativamente pequeña. Alexandre Fiori es el único principal responsable del repositorio.
" Pyramid es un marco general de desarrollo de aplicaciones web Python de código abierto. Su objetivo principal es facilitar que un desarrollador de Python cree aplicaciones web". Realmente no he usado Pyramid, pero revisé la documentación. Por lo que entiendo, Pyramid es muy similar a Flask y creo que puedes usar Pyramid donde Flask parece apropiado y viceversa.
EDITAR : ¡La solicitud de revisar cualquier otro marco es bienvenida!
Fuente: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html
fuente
Obviamente, esta es una respuesta algo sesgada , pero no es lo mismo que una respuesta incorrecta ; siempre debes usar Twisted. He respondido preguntas similares antes, pero como su pregunta no es la misma, aquí hay algunas razones:
"Mejor actuacion"
Twisted monitorea continuamente nuestro rendimiento en el sitio web speed.twistedmatrix.com . También fuimos uno de los primeros proyectos en ser monitoreados por el sitio similar de PyPy , asegurando así el buen rendimiento de Twisted en el tiempo de ejecución que cualquier persona interesada en aplicaciones de alto rendimiento en Python.
"Escalabilidad"
Que yo sepa, ninguno de los marcos enumerados tiene soporte incorporado para el escalado automático; son todos marcos de comunicación, por lo que debe hacer el trabajo para comunicarse entre sus nodos de escala. Sin embargo, Twisted tiene una ventaja en su soporte integrado para multiprocesamiento local . Para ser justos, hay un complemento de terceros para Tornado que le permite hacer lo mismo. En versiones recientes, Twisted ha agregado características que aumentan la cantidad de formas en que puede compartir el trabajo entre núcleos, y el trabajo está en curso en esa área. Twisted también tiene un par de bien integrados , "nativos" protocolos RPC que ofrecen una construcción de kit para cualquier lenguaje de escala que desea seguir.
"Más útil"
Mucha gente parece encontrar Twisted muy útil . Tanto es así que muchos de ellos lo han extendido y han hecho que sus extensiones estén disponibles para usted.
"Funcionalidad"
Fuera de la caja, Twisted incluye:
En este último departamento, al menos, Twisted parece un claro ganador de la funcionalidad incorporada. ¡Y todo esto, en un paquete de poco más de 2 megabytes!
fuente
spawnProcess
, esta programación de E / S también se puede traducir a la programación de la CPU.Me gusta la respuesta de @Glyph. Twisted es un completo y completo framework de Python. Twisted y Tornado tienen un diseño muy similar. Y me gusta mucho este diseño:
Pero quiero resaltar Tornado , que prefiero y recientemente gané popularidad. Tornado, al igual que Twisted, usa programación de estilo de devolución de llamada, pero se puede incorporar usando
tornado.gen.engine
(twisted.internet.inlineCallbacks
en Twisted).Codebase
El mejor comentario es del sitio http://cyclone.io . ciclón intenta mezclar Twisted y Tornado porque:
Pero en 2011
tornado.platform.twisted
salió, lo que trae una funcionalidad similar.Actuación
Tornado tiene mucho mejor rendimiento . También funciona a la perfección con PyPy y obtiene una gran ganancia.
Escalabilidad
Lo mismo que Twisted. Tornado tiene
tornado.process
y muchos servicios de rpc implementados además.Funcionalidad
Hay 71 paquetes basados en Tornado, en comparación con 148 Twisted's y 48 Gevent's. Pero si observa detenidamente y calcula la mediana del tiempo de carga de los paquetes, verá que los Twisted son los más antiguos, luego Gevent y Tornado los más frescos. Además, hay un
tornado.platform.twisted
módulo que le permite ejecutar código escrito para Twisted on Tornado .Resumen
Con Tornado puedes usar un código de Twisted. No es necesario usar un ciclón que solo tuerce su código (su código se vuelve más desordenado).
En cuanto a 2014, Tornado se considera como un marco asincrónico ampliamente aceptado y predeterminado que funciona tanto en python2 como en python3. Además, la última versión 4.x trae mucha funcionalidad de https://docs.python.org/dev/library/asyncio.html .
Escribí un artículo, explicando por qué considero que Tornado es el mejor marco web de Python donde escribí mucho más sobre la funcionalidad de Tornado.
fuente
( ACTUALIZACIÓN : Estoy tristemente sorprendido por las pocas respuestas que aquí recomiendan o incluso mencionan Gevent, ¡no creo que sea en proporción a la popularidad, el rendimiento y la facilidad de uso de esta excelente biblioteca!)
Gevent y Twisted no son mutuamente excluyentes, aunque lo contrario pueda parecer obvio al principio. Hay un proyecto llamado
geventreactor
que permite aprovechar de manera relativamente fluida lo mejor de ambos mundos, a saber:inlineCallbacks
simplemente no está a la altura del trabajo en términos de rendimiento cuando se trata de muchas corutinas, y tampoco en términos de facilidad / transparencia de uso:yield
y enDeferreds
todas partes; a menudo es difícil construir algunas abstracciones; trazas de pila horriblemente inútiles tanto conDeferred
s desnudos como con, y aún más con@inlineCallbacks
.IReactorProcess.spawnProcess
.Actualmente estoy usando Gevent 1.0rc2 con Twisted 12.3 en puente
geventreactor
. He implementado mis propias adiciones y mejoras aún no publicadas,geventreactor
que publicaré pronto, con suerte como parte delgeventreactor
repositorio original de GitHub: https://github.com/jyio/geventreactor .Mi disposición actual me permite programar en el modelo de programación de GEvent agradable, y las cosas de apalancamiento como un no-bloqueo
socket
,urllib2
y otros módulos. Puedo usar el código Python normal para hacer cosas normales, a diferencia de la curva de aprendizaje y el inconveniente de hacer incluso cosas simples y básicas de la manera Twisted. También puedo usar fácilmente la mayoría de las bibliotecas de terceros que normalmente están fuera de discusión con Twisted o requieren el uso de hilos.También puedo evitar por completo la programación incómoda y, a menudo, demasiado compleja basada en la devolución de llamada utilizando greenlets (en lugar de
Deferred
sy devoluciones de llamada, y / o@inlineCallbacks
).(Esta respuesta fue escrita en base a mis experiencias personales al haber usado Twisted y Gevent en proyectos de la vida real, con mucha más experiencia usando Twisted (pero no pretendo ser un experto en Twisted). El software que he tenido que escribir hash No tuve que usar muchas de las características de Twisted, por lo que, dependiendo del conjunto de características que requiera de Twisted, la complejidad adicional (relativamente indolora) de mezclar Gevent y Twisted podría no valer la pena).
fuente