Eventlet o gevent o Stackless + Twisted, Pilones, Django y SQL Alchemy


Estamos usando Twisted ampliamente para aplicaciones que requieren una gran cantidad de e / s asincrónicas. Hay algunos casos en los que las cosas están vinculadas a la cpu y para eso generamos un grupo de procesos para hacer el trabajo y tenemos un sistema para administrarlos a través de múltiples servidores, así, todo hecho en Twisted. Funciona muy bien. El problema es que es difícil poner al día a los nuevos miembros del equipo. Escribir código asincrónico en Twisted requiere una curva de aprendizaje casi vertical. Es como si los humanos no pensaran que de forma natural.

Estamos considerando un enfoque mixto tal vez. Tal vez mantener la parte del servidor xmlrpc y la administración de procesos en Twisted e implementar el resto de cosas en código que al menos se vea sincrónico hasta cierto punto mientras no sea como tal. Por otra parte me gusta explícito sobre implícito así que tengo que pensar en esto un poco más. De todos modos en greenlets - ¿qué tan bien funciona eso? Así que no hay Stackless y como se puede ver en mi avatar gallentean soy muy consciente del tremendo éxito in it's use for CCP's flagship EVE Online game first hand. ¿Qué pasa con Eventlet o gevent? Bueno, por ahora solo Eventlet funciona con Twisted. Sin embargo, gevent afirma ser más rápido, ya que no es una implementación pura de python, sino que se basa en libevent. También afirma tener menos idiosincrasias y defectos. gevent Es mantenido por 1 tipo por lo que puedo decir. Esto me hace un poco receloso, pero todos los grandes proyectos comienzan de esta manera... Luego está PyPy - Ni siquiera he terminé de leer sobre eso todavía - solo lo vi en este hilo: Inconvenientes de Stackless.

Tan confuso - me pregunto qué diablos hacer - suena como Eventlet es probablemente la mejor apuesta, pero es realmente lo suficientemente estable? ¿Alguien por ahí tiene experiencia con él? Deberíamos ir con Stackless en su lugar, ya que ha existido y es una tecnología probada, al igual que Twisted, y funcionan juntos muy bien. Pero aún así odio tener que tener una versión separada de Python para hacer esto. qué hacer....

Esta entrada de blog algo desagradable golpeó el clavo en la cabeza para mí sin embargo: IO asíncrono para adultos No entiendo lo Retorcido está siendo como Java comentario en cuanto a mí Java es típicamente donde estás en la mentalidad de rosca, pero lo que sea. Sin embargo, si ese parche de mono realmente funciona así, entonces wow. ¡Guau!

Author: Community, 2010-06-15

4 answers

Es posible que desee comprobar hacia fuera:

Eventlet y gevent no son realmente comparables a Stackless, porque Stackless se envía con una biblioteca estándar que no conoce tasklets. Hay implementaciones de socket para Stackless pero no hay nada tan completo como gevent.mono. CCP no utiliza huesos desnudos Stackless, tiene algo llamado Stackless I / O que AFAIK es solo para Windows y nunca fue de código 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.

 28
Author: Denis Bilenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 04:21:28

Respondiendo parte de tu pregunta-si miras http://speed.pypy.org verás que usar twisted en la parte superior de PyPy puede darte algunas aceleraciones. Esto depende, por supuesto, de su carga de trabajo, pero probablemente vale la pena echarle un vistazo.

Salud,
fijal

 4
Author: fijal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-29 19:23:10

He creado una pequeña aplicación web en tiempo real sobre eventlet y repoze.bfg (Renuncié a django hace bastante tiempo). He encontrado eventlet y monkey patching para ser tan fácil como Ted dice.

 0
Author: Ben Ford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-23 14:32:09

Gevent no es Python puro, y depende estrictamente de CPython. Desde web frameworks mencionaste Eventlet (OpenStack) y Tornado (FriendsFeed, Quora) tiene el mayor despliegue.

 0
Author: Robert Zaremba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-29 18:29:56