PythonのTwistedフレームワークは、他のフレームワークと比べると見劣りするという話をますます耳にします。
誰かがこれに光を当てて、Twistedを他のネットワークプログラミングフレームワークと比較できるでしょうか。
PythonのTwistedフレームワークは、他のフレームワークと比べると見劣りするという話をますます耳にします。
誰かがこれに光を当てて、Twistedを他のネットワークプログラミングフレームワークと比較できるでしょうか。
gevent
「占い師」アプリケーションのTwistedの代替ですblip.tv/file/4883016
回答:
Twistedには、かっこいいと思うさまざまな側面がたくさんあります。
Twistedには、多数のプロトコル実装が含まれています。つまり、HTTP、FTP、SMTP、POP3、IMAP4などのリモートシステム(ほとんどの場合、クライアントまたはサーバー)との通信に使用できるAPIが存在する可能性が高くなります。、DNS、IRC、MSN、OSCAR、XMPP / Jabber、telnet、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について私が最もクールだと思うのは、それがかなり退屈なライブラリであり、本当に退屈な問題の多くを無視して、面白くて楽しいことに集中できることです。:)
まあそれはおそらく好みによるものです。
Twistedを使用すると、これを達成するために必要なすべてのことを実際に心配することなく、イベント駆動型ネットワークサーバー/クライアントを簡単に作成できます。そしてMITライセンスのおかげで、ツイストはほとんどどこでも使用できます。しかし、私はベンチマークを行っていないので、それがどのようにスケーリングするかはわかりませんが、かなり良いと思います。
もう1つの利点は、Twisted Projectsです。これを使用すると、必要なサーバー/サービスのほとんどを実装する方法をすばやく確認できます。
Twistedにはいくつかの優れたドキュメントもあります。数週間前にTwistedを使い始めたとき、すぐに実用的なプロトタイプを入手することができました。
Pythonシーンはまったく新しいので、間違っている場合は修正してください。