web-dev-qa-db-fra.com

Qu'est-ce qui est si cool avec Twisted?

J'entends de plus en plus que les roches du cadre Twisted de Python et d'autres cadres pâles en comparaison.

Quelqu'un peut-il nous éclairer à ce sujet et peut-être comparer Twisted à d'autres cadres de programmation réseau.

82
Anton Gogolev

Il y a beaucoup d'aspects différents de Twisted que vous pourriez trouver cool.

Twisted comprend de nombreuses implémentations de protocoles, ce qui signifie qu'il est plus probable qu'improbable qu'il y ait une API que vous pouvez utiliser pour parler à un système distant (client ou serveur dans la plupart des cas) - que ce soit HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP/Jabber , telnet, SSH , SSL, NNTP , ou l'un des vraiment protocoles obscurs comme Finger, ou ident, ou l'un des protocoles de construction de niveau inférieur -protocoles comme DJB'snetstrings , simples protocoles orientés ligne , ou même l'un des protocoles personnalisés de Twisted comme Perspective Broker (PB) ou Protocole de messagerie asynchrone (AMP) .

Une autre chose intéressante à propos de Twisted est qu'en plus de ces implémentations de protocole de bas niveau, vous trouverez souvent une abstraction un peu plus facile à utiliser. Par exemple, lors de l'écriture d'un serveur HTTP, Twisted Web fournit ne abstraction "Ressource" qui vous permet de construire des hiérarchies d'URL à partir d'objets Python pour définir comment les demandes seront traitées) à.

Tout cela est lié aux API coopérantes, principalement en raison du fait qu'aucune de ces fonctionnalités n'est implémentée en bloquant sur le réseau, vous n'avez donc pas besoin de démarrer n thread pour chaque opération que vous voulez faire . Cela contribue à l'évolutivité que les gens attribuent souvent à Twisted (bien que ce soit le type d'évolutivité qui n'implique qu'un seul ordinateur, pas le type d'évolutivité qui permet à votre application de se développer pour utiliser un cluster entier d'hôtes) car Twisted peut gérer des milliers de connexions dans un seul thread, ce qui a tendance à mieux fonctionner que d'avoir des milliers de threads, chacun pour une seule connexion.

Éviter le threading est également bénéfique pour les tests et le débogage (et donc la fiabilité en général). Comme il n'y a pas de changement de contexte préventif dans un programme basé sur Twisted, vous n'avez généralement pas à vous soucier du verrouillage. Les conditions de concurrence critique qui dépendent de l'ordre des différents événements de réseau qui se produisent peuvent facilement être testées en simulant ces événements de réseau (alors que la simulation d'un changement de contexte n'est pas une fonctionnalité fournie par la plupart des bibliothèques de threads).

Twisted est aussi vraiment, vraiment soucieux de la qualité . Vous allez donc trouver rarement des régressions dans une version Twisted, et la plupart des API fonctionnent, même si vous ne les utilisez pas de la manière habituelle (parce que nous essayons de tester toutes les façons dont vous pourriez les utiliser, pas seulement la manière courante). Cela est particulièrement vrai pour tout le code ajouté à Twisted (ou modifié) au cours des 3 ou 4 dernières années, car une couverture de ligne à 100% a été une exigence de test minimale depuis lors.

Une autre force souvent négligée de Twisted est ses dix années à trouver une plate-forme différente bizarreries . Il y a beaucoup d'erreurs de socket non documentées sur différentes plates-formes et il est vraiment difficile d'apprendre qu'elles existent même, sans parler de les gérer. Twisted en a progressivement couvert de plus en plus, et c'est assez bien à ce stade. Les projets plus jeunes n'ont pas cette expérience, ils manquent donc des modes de défaillance obscurs qui n'arriveront probablement qu'aux utilisateurs de n'importe quel projet que vous publiez, pas à vous.

Tout cela dit, ce que je trouve le plus cool à propos de Twisted, c'est que c'est une bibliothèque assez ennuyeuse qui me permet d'ignorer beaucoup de problèmes vraiment ennuyeux et de me concentrer uniquement sur les choses intéressantes et amusantes. :)

127

Eh bien, c'est probablement selon le goût.

Twisted vous permet de créer facilement des serveurs/clients réseau pilotés par les événements, sans vraiment vous soucier de tout ce qui est nécessaire pour y parvenir. Et grâce à la Licence MIT , Twisted peut être utilisé presque partout. Mais je n'ai fait aucune analyse comparative, donc je n'ai aucune idée de la façon dont il évolue, mais je suppose que c'est assez bon.

Un autre avantage serait le Twisted Projects , avec lequel vous pouvez rapidement voir comment implémenter la plupart des serveurs/services que vous souhaitez.

Twisted a également une grande documentation , quand j'ai commencé avec elle il y a quelques semaines, j'ai pu obtenir rapidement un prototype fonctionnel.

Tout nouveau dans la scène python veuillez me corriger si je me trompe.

9
Johann du Toit