web-dev-qa-db-ja.com

Twistedの素晴らしいところは何ですか?

Pythonの Twisted フレームワークが他のフレームワークと比べて見劣りすることをますます耳にします。

誰もがこれにいくらかの光を当てることができ、おそらくTwistedを他のネットワークプログラミングフレームワークと比較できますか?.

82
Anton Gogolev

Twistedには、あなたがクールだと感じるかもしれないさまざまな側面がたくさんあります。

Twistedには、多くのプロトコル実装が含まれています。つまり、リモートシステム(ほとんどの場合、クライアントまたはサーバー)と通信するために使用できるAPIが存在する可能性が高いことを意味します-それは [〜#〜] http [〜#〜][〜#〜] ftp [〜#〜]SMTP、POP3、IMAP4[〜#〜 ] dns [〜#〜]IRC、MSN、OSCAR、XMPP/Jabbertelnet、SSH 、SSL、 [〜#〜] nntp [〜#〜] 、またはreallyのいずれか、またはFinger、identなどの不明瞭なプロトコル、または低レベルのプロトコル構築の1つ DJB'snetstringsシンプルなライン指向プロトコル 、または Perspective Broker(PB)などのTwistedのカスタムプロトコルのいずれか または Asynchronous Messaging Protocol(AMP)

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

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

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

Twistedは本当に、本当に 品質に関係する です。 まれにリグレッションを見つける Twistedリリースでは、ほとんどのAPIは、一般的な方法で使用していなくても機能します(すべての方法をテストしようとしているため)一般的な方法だけでなく、それらを使用してください)。これは、過去3年または4年でTwistedに追加された(または変更された)すべてのコードに特に当てはまります。

Twistedのもう1つの見過ごされがちな長所は、異なるプラットフォームを見つけ出す10年間 quirks です。さまざまなプラットフォーム上に文書化されていないソケットエラーが多数あり、それらを処理することはもちろんのこと、それらが存在することを知るのは非常に困難です。 Twistedは次第にこれらをますますカバーしてきましたが、この時点でそれはかなり良いです。若いプロジェクトにはこのような経験がないため、おそらくあなたがリリースしたプロジェクトのユーザーにのみ発生し、あなたには発生しない不明瞭な障害モードを逃します。

つまり、Twistedで最もクールだと思うのは、退屈な問題をほとんど無視して、面白くて楽しいことだけに集中できる、かなり退屈なライブラリだということです。 :)

127

まあ、それはおそらく好みによる。

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

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

Twistedには素晴らしいものもあります documentation 。数週間前にTwistedを使い始めたとき、すぐに動作するプロトタイプを手に入れることができました。

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

9
Johann du Toit