python - Eventlet o gevent o Stackless+Twisted, Pylons, Django y SQL Alchemy
pypy python-stackless (4)
Construí una pequeña aplicación web en tiempo real sobre eventlet y repoze.bfg (abandoné el django hace bastante tiempo). He encontrado que los parches de Eventlet y de mono son tan fáciles como dice Ted.
Estamos utilizando Twisted extensivamente para aplicaciones que requieren una gran cantidad de io asincrónico. En algunos casos, las cosas están unidas a CPU y para eso generamos un conjunto de procesos para hacer el trabajo y también tenemos un sistema para administrarlos en varios servidores, todo hecho en Twisted. Funciona genial. El problema es que es difícil poner a los nuevos miembros del equipo al tanto. Escribir un código asíncrono en Twisted requiere una curva de aprendizaje casi vertical. Es como si los humanos simplemente no pensaran de esa manera naturalmente.
Estamos considerando un enfoque mixto tal vez. Quizás mantenga la parte del servidor xmlrpc y la gestión de procesos en Twisted e implemente las demás cosas en el código que, al menos, se ve sincrónico en cierta medida mientras no sea así. Por otra parte, me gusta explícita sobre implícita, así que tengo que pensar un poco más sobre esto. De todos modos en greenlets, ¿qué tan bien funciona eso? Así que está Stackless y, como pueden ver en mi avatar Gallentean, soy muy consciente del tremendo éxito en su uso para el juego principal EVE Online de CCP. ¿Qué hay de Eventlet o gevent? Bueno, por ahora solo Eventlet trabaja con Twisted. Sin embargo, gevent afirma ser más rápido ya que no se trata de una implementación pura de Python, sino que se basa en libevent en su lugar. También afirma tener menos idiosincrasias y defectos. gevent Es mantenido por 1 hombre por lo que puedo decir. Esto me pone un poco receloso, pero todos los grandes proyectos comienzan de esta manera, así que ... Luego está PyPy , aún no he terminado de leer sobre eso, solo lo vi en este hilo: Inconvenientes de Stackless .
Tan confuso, me pregunto qué diablos hacer, suena como si Eventlet fuera la mejor opción, pero ¿es realmente lo suficientemente estable? ¿Alguien tiene alguna experiencia con eso? En su lugar, deberíamos ir con Stackless ya que ha existido y es una tecnología probada, al igual que Twisted también, y funcionan muy bien juntas. Pero aún odio tener que tener una versión separada de Python para hacer esto. qué hacer....
Sin embargo, esta entrada de blog un tanto desagradable me dio en la cabeza: Asincrónico IO para adultos No entiendo lo que Twisted es como observación de Java, porque a mí, Java normalmente es donde estás en la mentalidad de subprocesamiento pero lo que sea. Sin embargo, si ese parche de mono realmente funciona así, entonces wow. ¡Simplemente guau!
Es posible que desee verificar:
Eventlet y gevent no son realmente comparables con Stackless, porque Stackless se envía con una biblioteca estándar que no tiene conocimiento de los tasklets. Hay implementaciones de socket para Stackless, pero no hay nada tan completo como gevent.monkey . CCP no usa huesos desnudos. Sin apilamiento, tiene algo llamado E / S apilada, que AFAIK es solo para Windows y nunca fue de origen abierto (?).
Tanto eventlet como gevent podrían ejecutarse en Stackless en lugar de en greenlet. En algún momento, incluso tratamos de hacer esto como un proyecto GSoC pero no encontramos un estudiante.
Respondiendo parte de tu pregunta: si miras en http://speed.pypy.org , verás que usar twisted encima de PyPy puede darte algunas aceleraciones. Esto depende, por supuesto, de su carga de trabajo, pero probablemente valga la pena verificarlo.
Aclamaciones,
fijal