ツイストの何がそんなにクールなのですか?[閉まっている]


83

PythonのTwistedフレームワークは、他のフレームワークと比べると見劣りするという話をますます耳にします。

誰かがこれに光を当てて、Twistedを他のネットワークプログラミングフレームワークと比較できるでしょうか。


2
何があるように思えませんそこにそう質問は少し難しい答えることであるTIS、でもリモートでツイストを比較していること。どのような代替案を検討していますか?
Sven Marnach 2011年

1
@Sven Python開発者でさえないので、Twistedが宣言されているほど優れている理由について知りたいだけです。
アントンゴゴレフ2011年

2
@Sven Marnach:問題のドメインによって異なります。たとえば、gevent「占い師」アプリケーションのTwistedの代替ですblip.tv/file/4883016
jfs

回答:


131

Twistedには、かっこいいと思うさまざまな側面がたくさんあります。

Twistedには、多数のプロトコル実装が含まれています。つまり、HTTPFTPSMTP、POP3、IMAP4などのリモートシステム(ほとんどの場合、クライアントまたはサーバー)との通信に使用できるAPIが存在する可能性が高くなります。、DNSIRC、MSN、OSCAR、XMPP / Jabbertelnet、SSH、SSL、NNTP、またはFinger、identなどの非常にあいまいなプロトコルのいずれか、またはDJBの ネットストリングなどの低レベルのプロトコル構築プロトコルの1つ、シンプルライン指向のプロトコル、またはPerspective Broker(PB)やTwistedのようなTwistedのカスタムプロトコルの1つ非同期メッセージングプロトコル(AMP)

Twistedのもう1つの優れた点は、これらの低レベルのプロトコル実装に加えて、使いやすい抽象化が見つかることが多いことです。たとえば、HTTPサーバーを作成する場合、Twisted Webは「リソース」抽象化を提供ます。これにより、PythonオブジェクトからURL階層を構築して、要求への応答方法を定義できます。

これらはすべて、協力するAPIと結びついています。これは主に、この機能がネットワーク上でブロックすることによって実装されていないためです。したがって、実行するすべての操作に対してスレッドを開始する必要はありません。これは、Twistedが数千を処理できるため、人々がTwistedに起因することが多いスケーラビリティに貢献します(ただし、アプリケーションがホストのクラスタ全体を使用するように拡張できるようなスケーラビリティではなく、単一のコンピュータのみが関与する種類のスケーラビリティです)単一のスレッドでの接続。これは、それぞれが単一の接続に対して数千のスレッドを持つよりもうまく機能する傾向があります。

スレッド化を回避することは、テストとデバッグ(したがって一般的な信頼性)にも役立ちます。通常のツイストベースのプログラムにはプリエンプティブなコンテキスト切り替えがないため、通常、ロックについて心配する必要はありません。発生するさまざまなネットワークイベントの順序に依存する競合状態は、それらのネットワークイベントをシミュレートすることで簡単に単体テストできます(コンテキストスイッチのシミュレーションは、ほとんどの(任意の?)スレッドライブラリによって提供される機能ではありません)。

ツイストも本当に、本当に品質に関心があります。そのため、Twistedリリースでリグレッション見つかることはめったになく、APIを一般的な方法で使用していなくても、ほとんどのAPIは正常に機能します(一般的な方法だけでなく、使用する可能性のあるすべての方法をテストしようとしているため)仕方)。これは、過去3〜4年間にTwistedに追加された(または変更された)すべてのコードに特に当てはまります。それ以来、100%のラインカバレッジが最小テスト要件であるためです。

Twistedのもう1つの見過ごされがちな強みは、さまざまなプラットフォームのを理解してきた10年です。さまざまなプラットフォームで文書化されていないソケットエラーがたくさんあり、それらを処理することは言うまでもなく、それらが存在することさえ知るのは本当に難しいです。Twistedは徐々にこれらの多くをカバーしてきました、そしてそれはこの時点でそれについてかなり良いです。若いプロジェクトにはこの経験がないため、リリースしたプロジェクトのユーザーにのみ発生し、あなたには発生しない、あいまいな障害モードを見逃します。

とはいえ、Twistedについて私が最もクールだと思うのは、それがかなり退屈なライブラリであり、本当に退屈な問題の多くを無視して、面白くて楽しいことに集中できることです。:)


1
リソースの抽象化について提供したリンクからは、文書化が不十分に見えます。しかし、素晴らしい返事、賛成に感謝します。
vinipsmaker 2014年

良い点の1つは、「文書化されていないソケットエラー」について説明することです。いい説明。ありがとう。
Haranadh 2017年

私はTwistedとDjangoをしばらく使用していて、DjangoをTwistedに置き換えることができると感じるようになりました。奇妙に聞こえますが、フロントエンドアプリケーションが必要なだけで、Twistedですべてのプロトコルを定義し、ORMを使用してデータベースを管理します。ただし、twistedは、1つのことだけを実行できるようにボックス化しようとしないフレームワークだと思います。
DurodolaOpemipo19年

9

まあそれはおそらく好みによるものです。

Twistedを使用すると、これを達成するために必要なすべてのことを実際に心配することなく、イベント駆動型ネットワークサーバー/クライアントを簡単に作成できます。そしてMITライセンスのおかげで、ツイストはほとんどどこでも使用できます。しかし、私はベンチマークを行っていないので、それがどのようにスケーリングするかはわかりませんが、かなり良いと思います。

もう1つの利点は、Twisted Projectsです。これを使用すると、必要なサーバー/サービスのほとんどを実装する方法をすばやく確認できます。

Twistedにはいくつかの優れたドキュメントもあります。数週間前にTwistedを使い始めたとき、すぐに実用的なプロトタイプを入手することができました。

Pythonシーンはまったく新しいので、間違っている場合は修正してください。


8
Twistedから始めることの大きな利点の1つは、Twisted自体の設計方法が原因で、決して発生しないスケーラビリティの問題が多数あることです。ネットワーク化されたアプリケーションを構築するときに、最初にすべてのありふれた方法を再発見する代わりに、足で自分を撃つための新しく創造的な方法を発見することができます:)
ncoghlan 2011年

はい、ツイストと一緒に仕事をしている初心者として、それは私がすぐに発見したものです。そして、アーキテクチャが私が非常に広範囲に使用した多くのNetty [ jboss.org/netty ]を思い出させる方法が大好きなので、考え方を理解するのは非常に迅速でした。
Johann du Toit 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.