Hay muchos aspectos diferentes de Twisted que pueden resultar interesantes.
Twisted incluye montones y montones de implementaciones de protocolos, lo que significa que es más probable que no habrá una API que puede utilizar para hablar con algún sistema remoto (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 realmente protocolos oscuros como el dedo, o identificación, o uno de los-protocolos de construcción de protocolos de bajo nivel como DJB'snetstrings, simple line-oriented protocols, o incluso uno de los protocolos personalizados de Twisted como Perspective Broker (PB) o Asynchronous Messaging Protocol (AMP).
Otra cosa interesante acerca de Twisted es que además de estas implementaciones de protocolo de bajo nivel, a menudo encontrará una abstracción que es algo más fácil de usar. Por ejemplo, al escribir un servidor HTTP, Twisted Web proporciona a "Resource" abstraction que le permite construir jerarquías de URL fuera de los objetos de Python para definir cómo se responderán las solicitudes.
Todo esto está relacionado con las API cooperantes, principalmente debido a que ninguna de estas funcionalidades se implementa mediante el bloqueo en la red, por lo que no es necesario que inicie a thread for every operation you want to do. Esto contribuye a la escalabilidad que las personas suelen atribuir 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 conjunto completo de hosts) porque Twisted puede manejar miles de conexiones en un único subproceso, que tiende a funcionar mejor que tener miles de subprocesos, cada uno para una sola conexión.
Evitar el enhebrado también es beneficioso para las pruebas y la depuración (y por lo tanto, la fiabilidad en general). Como no hay 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 de los diferentes eventos de red que suceden 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 función proporcionada por la mayoría (¿alguna?) De las bibliotecas de subprocesos).
Twisted también es realmente concerned with quality.Así que tendrá rarely find regressions en una versión Twisted, y la mayoría de las API solo funcionan, incluso si no las está usando de la manera en común (porque tratamos de probar todas las formas en que las puede usar, no solo la manera común) . 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 de prueba mínimo desde entonces.
Otra fuerza a menudo pasada por alto de Twisted es su diez años de averiguar plataforma diferente quirks. Hay muchos errores de socket no documentados en diferentes plataformas y es realmente difícil saber que incluso existen, y mucho menos manejarlos. Twisted ha cubierto gradualmente más y más de estos, y es bastante bueno al respecto en este punto. Los proyectos más jóvenes no tienen esta experiencia, por lo que se pierden modos de falla oscuros que probablemente solo le sucedan a los usuarios de cualquier proyecto que publique, no a usted.
Todo lo que dicen, lo que más me gusta de Twisted es que es una biblioteca bastante aburrida que me permite ignorar muchos problemas realmente aburridos y solo centrarme en las cosas interesantes y divertidas. :)
No parece haber nada [por ahí] (http://wiki.python.org/moin/UsefulModules#Networking) que incluso remotamente se compare con Twisted, por lo que esta pregunta es un poco difícil de responder . ¿Qué alternativas estás considerando? –
@Sven Ni siquiera soy un desarrollador de Python, solo tengo curiosidad por saber qué hace que Twisted sea tan bueno como está declarado. –
@Sven Marnach: Depende del dominio del problema, por ejemplo, ['gevent'] (http://www.gevent.org/) es una alternativa a Twisted para la aplicación del" adivino "http://blip.tv/ file/4883016 – jfs