[python-madrid] Propuesta

Aitor Guevara aitorciki at gmail.com
Fri Apr 20 23:48:25 CEST 2012


En fin, creo que esto puede hacerse eterno, porque tiene mucho más que
ver con gustos personales que con limitaciones técnicas.

Si Twisted fuese inusable y la gente no quisiese "ni tocarlo con un
palo", llevaría muerto años (lleva casi 10 dando guerra). En cambio en
la lista de proyectos gordos que lo usan
(http://twistedmatrix.com/trac/wiki/SuccessStories) veo cantidad de
cosas no sólo nuevas, sino tremendamente exitosas (HipChat, TweetDeck,
JustinTV, ...). OpenStack levanta una expectación brutal, y ahí lo
tienes, Twisted de los pies a la cabeza.

Evidentemente, que otros lo usen o no no lo convierte en bueno o malo,
pero la gente detrás de esos productos precisamente tontos no son.

Varios puntos que se han tocado estos días, y como lo veo yo, por si a
alguien le interesa (lo que sigue es un buen tochaco, avisados
estáis):

* Twisted es complicado, no es Pythonico

Sí pero no :) Escribir software de red asíncrono de cierto tamaño es
complicado, se use la herramienta que se use. Si alguien cree en
librerías mágicas que eliminan toda la complejidad y permiten crear
sistemas para cientos de miles de usuarios como si fuese un script
chorra, se equivoca, y punto.

Que la herramienta me permita trabajar de manera más eficiente,
pudiendo escribir menos (Python es muy expresivo) y facilitando que el
código sea legible (Python desde luego apuesta por esa vía), perfecto.
Que pretenda "ocultar" la complejidad inherente al sistema ya no me
gusta tanto, eso no suele acabar bien. Y no acaba bien porque cuando
las cosas empiezan a petar bajo carga, es muy probable que los errores
ocurran fuera de mi comprensión del sistema, y ahora ves a entender la
magia que hace la librería x.

Del famoso Zen de Python, mi afirmación favorita es "Explicit is
better than implicit." Creo que es lo que distingue a Python de Ruby,
donde mucha magia ocurre de manera implícita. Twisted es explícito en
su tratamiento de la asincronía, sí, y eso para mí es bueno. Más
cuando mi modelo mental de asincronía encaja muy bien con lo que
propone Twisted.

* Twisted es un framework, te obliga a hacer las cosas a su manera, eso es malo

Sí pero no :) Entiendo que, según las necesidades del software que se
escribe, Twisted es matar moscas a cañonazos. Como lo es usar Django
para según que aplicaciones web pequeñas. Pero no parece que a Django
o Ruby on Rails les vaya mal por ser frameworks, parece que a la gente
les son bien útiles.

Si sólo quiero hacer unas cuantas peticiones HTTP a un servicio de por
ahí, mover toda mi aplicación al modelo reactor / deferred de Twisted
es una locura, sin duda. Ahora bien, si pretendo escribir un proceso
que sirve HTTP y HTTPS, además de ser cliente de otro servicio web,
que ofrece una interfaz SSH a su estado de ejecución, usa su propia
política de resolución de DNS por temas de geolocalización y cache, y
que también es servidor de WebSocket, Twisted es excelente. Es
excelente porque ese programa es, en el 90%, código de red que implica
varios protocolos como cliente y servidor. Puedo usar 8 librerías
distintas, sí, y hacer que de algún modo funcionen juntas, y adaptarme
a las peculiaridades de cada una. O puedo usar Twisted y escribir toda
esa funcionalidad de manera integrada y con un único estilo.

Y no, no es un caso de uso inventado, es el tipo de software que llevo
años escribiendo para ganarme el pan :)

* Twisted es feo, echa para atrás, nadie querría ni tocarlo con un palo, ...

Mmmm, un poco sí, pero no :) Me costó introducirme en el modelo
Twisted, viniendo del código procedural de toda la vida, habían cosas
que no me encajaban. Además, todo ese camel case es horrible xD. Pero
en algún momento se produjo un "click" en mi cabeza (como a la semana
de usarlo, vamos, no penséis que lleva años) y de golpe todo tenía
todo el sentido del mundo. El modelo de eventos, los protocolos, las
cadenas de callbacks, de golpe todo encaja.

Ahora mismo me costaría mucho pensar en código asíncrono de manera no
orientada a eventos. Los eventos me parecen una manera muy natural de
pensar: cuando pase x, haz y. No importa cuando sea, no esperes a que
ocurra bloqueando. Yo te digo que cuando ocurra, quiero que lo hagas,
y ya está. Como digo me parece muy natural. La sintaxis puede gustar
más o menos, pero como con todo, es una simple cuestión de costumbre.

* Resumiendo, que es gerundio.

Entiendo que Twisted no guste a todo el mundo. De hecho, no está
pensado para ser usado en cualquier proyecto, sólo en aquellos
proyectos donde la comunicación de red es el núcleo del software. Y
eso es una pequeña porción de todo el software que se escribe.

Ahora bien, llevo cerca de 5 años escribiendo sistemas en Twisted.
Sistemas que han soportado cargas totalmente locas (en Flumotion
llegamos a tener cerca de 40Gbit/s de upload haciendo streaming para
Antena3, TVE y otros). Me gusta Twisted, disfruto escribiéndolo y
conozco a mucha gente que también lo hace. Es una solución excelente
para un tipo dado de problema, y no valorarlo como tal por prejuicios
me parece un error.

Pero al final, todo es cuestión de gustos, si alguien no quiere
usarlo, por mi perfecto. Pero si alguien tiene curiosidad, mi consejo
es que no se deje asustar por tanto odio en la lista :)

Ala, my two cents :)

On Fri, Apr 20, 2012 at 20:21, Jesus Cea <jcea at jcea.es> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 20/04/12 20:02, Josep Danti wrote:
>> Hay algún caso en el que creo que gana twisted. Si se quieren usar
>> puertos serie,  twisted lo tiene implementado. gevent no lo tiene
>> por lo que en el primer read se quedaría bloqueado. Habría que
>> implementar el servicio con greenlets ¿verdad? En general veo que
>> Twisted tiene más protocolos.
>
> Como ya he dicho, twisted es un framework.
>
> Resumido, en cuanto tu código toca twisted, tiene que adaptarse a él y
> se vuelve dependiente, y si quieres usar una librería no soportada, ya
> puedes reescribirla...
>
> Eso provoca que twisted incluya mucho ecosistema alrededor. Pero es
> precisamente porque no se habla con nadie, así que todo lo que quieras
> hacer depende de twisted. Básicamente twisted es un mundo aparte,
> incluyo soporte de muchas cosas porque no es posible usar librerías
> "normales".
>
> Otros proyectos usando greenlets, por ejemplo, y con un simple
> "monkeypatching" del módulo "socket" (trivial) pueden utilizar
> CUALQUIER librería de terceros. Naturalmente, estos proyectos no
> incluyen apenas nada "de serie". No lo necesitan, porque usan
> cualquier librería python que encuentres y que te venga bien. No es
> necesario que esa librería esté programada para "twisted".
>
> Ejemplo simple:
>
> Si mi libreria hace "monkeypatch" de "socket" haciendo que cualquier
> lectura o escritura se meta automáticamente en un "select" y que ese
> "greenlet" se pare o se reanude cuando toca, mi programa puede usar
> CUALQUIER librería de la biblioteca estándar, como "smtplib" para
> enviar 1000 mensajes en paralelo sin tener que tocar esa librería y
> sin lanzar ni un solo hilo.
>
> Eso con twisted no se puede hacer.
>
> Así que sí, twisted incluye muchas cosa de serie... porque no tiene
> más remedio. Si necesitas algo que no está ahí, o no te gusta cómo lo
> hace... prepárate a sufrir.
>
> En su caso, si manejas el puerto serie como un fichero, puedes usar
> "select" o similares. Si tienes que hacer muchas más cosas a la vez,
> greenlets con un pelín de monkeypatching, o una librería específica
> como gevent o similar.
>
> PS: Yo sigo usando "poll" de forma masiva.
>
> - --
> Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
> jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
> jabber / xmpp:jcea at jabber.org         _/_/    _/_/          _/_/_/_/_/
> .                              _/_/  _/_/    _/_/          _/_/  _/_/
> "Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
> "My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iQCVAwUBT5GpIJlgi5GaxT1NAQLzxAP/W43EyV82FmbCQuV8WqFTmP9KGIPppSq+
> udSIn/xtsLWYpA9WsZ9SwTs+t9dxqX7zksd9E8uhE57PnX3x8Oc6OkOnWt6opJ1A
> Vdn9j0b8C9Fy8CiJmUqODoQmmDIzri6PuMKZa+NcqOSYDL4Hly8gMFIzITEbF9/H
> bVgIxTEDZIA=
> =nOTT
> -----END PGP SIGNATURE-----
>
> --
> Grupo de usuarios de python ubicados en Madrid
> http://groups.google.es/group/python-madrid
> http://python-madrid.es
> http://twitter.com/#!/python_madrid
> Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe at googlegroups.com

-- 
Grupo de usuarios de python ubicados en Madrid
http://groups.google.es/group/python-madrid
http://python-madrid.es
http://twitter.com/#!/python_madrid
Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe at googlegroups.com



More information about the Madrid mailing list