¿Qué tiene de genial Twisted? [cerrado]

83

Cada vez escucho más que el framework Twisted de Python y otros frameworks palidecen en comparación.

¿Alguien puede arrojar algo de luz sobre esto y posiblemente comparar Twisted con otros marcos de programación de redes?

Anton Gogolev
fuente
2
No parece haber nada por ahí que se compare ni remotamente con Twisted, por lo que esta pregunta es un poco difícil de responder. ¿Qué alternativas estás considerando?
Sven Marnach
1
@Sven Ni siquiera soy un desarrollador de Python, solo tengo curiosidad por saber qué hace que Twisted sea tan bueno como se dice.
Anton Gogolev
2
@Sven Marnach: Depende del dominio del problema, por ejemplo, geventes una alternativa a Twisted para la aplicación "adivina" blip.tv/file/4883016
jfs

Respuestas:

131

Hay muchos aspectos diferentes de Twisted que pueden resultar interesantes.

Twisted incluye montones y montones de implementaciones de protocolos, lo que significa que lo más probable es que haya una API que pueda usar para hablar con algún sistema remoto (ya sea cliente o servidor en la mayoría de los casos), ya sea HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , telnet, SSH , SSL, NNTP o uno de los protocolos realmente oscuros como Finger, o ident, o uno de los protocolos de construcción de protocolos de nivel inferior como las cadenas de red de DJB , simple protocolos orientados a la línea , o incluso uno de los protocolos personalizados de Twisted como Perspective Broker (PB) oProtocolo de mensajería asincrónica (AMP) .

Otra cosa interesante de Twisted es que además de estas implementaciones de protocolo de bajo nivel, a menudo encontrarás una abstracción que es algo más fácil de usar. Por ejemplo, al escribir un servidor HTTP, Twisted Web proporciona una abstracción de "Recurso" que le permite construir jerarquías de URL a partir de objetos Python para definir cómo se responderán las solicitudes.

Todo esto está vinculado con las API cooperantes, principalmente debido al hecho de que ninguna de esta funcionalidad se implementa mediante el bloqueo en la red, por lo que no es necesario iniciar un hilo para cada operación que desee realizar . Esto contribuye a la escalabilidad que la gente atribuye a Twisted (aunque es el tipo de escalabilidad que solo involucra una sola computadora, no el tipo de escalabilidad que permite que su aplicación crezca para usar un grupo completo de hosts) porque Twisted puede manejar miles de conexiones en un solo hilo, que tiende a funcionar mejor que tener miles de hilos, cada uno para una sola conexión.

Evitar los subprocesos también es beneficioso para las pruebas y la depuración (y, por tanto, la fiabilidad en general). Dado que no existe un cambio de contexto preventivo en un programa típico basado en Twisted, generalmente no necesita preocuparse por el bloqueo. Las condiciones de carrera que dependen del orden en que ocurren los diferentes eventos de red pueden probarse fácilmente mediante la simulación de esos eventos de red (mientras que la simulación de un cambio de contexto no es una característica proporcionada por la mayoría de las bibliotecas de subprocesos (¿alguna?)).

Twisted también se preocupa mucho por la calidad . Por lo tanto, rara vez encontrará regresiones en una versión Twisted, y la mayoría de las API simplemente funcionan, incluso si no las está usando de la manera común (porque intentamos probar todas las formas en que las puede usar, no solo las comunes camino). Esto es particularmente cierto para todo el código agregado a Twisted (o modificado) en los últimos 3 o 4 años, ya que la cobertura de línea del 100% ha sido un requisito mínimo de prueba desde entonces.

Otro punto fuerte de Twisted que a menudo se pasa por alto son sus diez años de descubrir diferentes peculiaridades de la plataforma . Hay muchos errores de socket indocumentados en diferentes plataformas y es realmente difícil saber que existen, y mucho menos manejarlos. Twisted ha cubierto gradualmente más y más de estos, y es bastante bueno en este momento. Los proyectos más jóvenes no tienen esta experiencia, por lo que pierden los modos de falla oscuros que probablemente solo les sucederán a los usuarios de cualquier proyecto que publique, no a usted.

Dicho todo esto, lo que me parece más genial de Twisted es que es una biblioteca bastante aburrida que me permite ignorar muchos problemas realmente aburridos y concentrarme en las cosas interesantes y divertidas. :)

Jean-Paul Calderone
fuente
1
y se ve mal documentado en el enlace que proporcionó sobre la abstracción de recursos. Pero gracias por la gran respuesta, votando a favor.
vinipsmaker
Un buen punto es explicar los "errores de socket no documentados". Buena explicación. Gracias.
Haranadh
He estado usando Twisted y Django por un tiempo y estoy llegando a ese punto en el que siento que puedo reemplazar Django con Twisted. Suena extraño, pero solo necesito una aplicación Front-end y definiría todos mis protocolos en Twisted y usaría algo de ORM para administrar mi base de datos. Sin embargo, veo retorcido como el marco que no intenta encerrarte para que puedas hacer solo una cosa.
Durodola Opemipo
9

Bueno, probablemente sea según el gusto.

Twisted le permite crear fácilmente servidores / clientes de red controlados por eventos, sin preocuparse realmente por todo lo que implica lograr esto. Y gracias a la licencia MIT , Twisted se puede utilizar en casi cualquier lugar. Pero no he hecho ninguna evaluación comparativa, así que no tengo idea de cómo se escala, pero supongo que bastante bien.

Otra ventaja serían los Twisted Projects , con los que puede ver rápidamente cómo implementar la mayoría de los servidores / servicios que le gustaría.

Twisted también tiene una gran documentación , cuando comencé con él hace un par de semanas, pude obtener rápidamente un prototipo funcional.

Bastante nuevo en la escena de Python, por favor corríjanme si me equivoco.

Johann du Toit
fuente
8
Una de las grandes ventajas de comenzar con Twisted es que hay una gran cantidad de problemas de escalabilidad que simplemente nunca surgen debido a la forma en que Twisted está diseñado. Te permite seguir descubriendo formas nuevas y creativas de dispararte en el pie, en lugar de redescubrir primero todas las formas mundanas de hacerlo al crear una aplicación en red :)
ncoghlan
Sí, como noobie, yo mismo trabajando con Twisted, eso es lo que descubrí rápidamente. Y me encanta cómo la arquitectura me recuerda mucho a Netty [ jboss.org/netty ], que utilicé bastante, así que aprender a pensar fue muy rápido.
Johann du Toit