Twistedは、
Pythonで記述された、イベント駆動型のネットワークプログラミングフレームワークです。MITライセンスの下で公開されており、その柔軟性と拡張性の高さから、多くの開発者に利用されています。
Twistedの主な特徴
プロトコルとトランスポートの分離:
Twistedは、論理的なプロトコル(例えばHTTPやPOP3)と、それらを支える物理的なトランスポート層(ファイル、ソケット、SSLライブラリなど)を完全に分離するように設計されています。これにより、プロトコルとトランスポート層の具体的な実装に依存しない、より柔軟な設計が可能になります。プロトコルは、トランスポート層のインスタンスを通じて、メッセージの送受信や相手の識別情報を確認できます。しかし、プロトコルコード内でトランスポート層の詳細に立ち入ることも可能ですが、それはトランスポート層がその機能をサポートしている場合に限られます。
Deferred (遅延評価オブジェクト):
Twistedのアプリケーションモデルの中核となる概念が、Deferredです。Deferredは、まだ計算が完了していない値(例えば、リモートから取得する必要があるデータ)を表すオブジェクトです。通常のオブジェクトのように扱うことができますが、値そのものを直接取得することはできません。Deferredはコールバックチェーンをサポートしており、値が確定すると、コールバック関数が順次実行されます。これにより、非同期処理を効率的に扱うことが可能になります。また、エラーが発生した場合に実行されるエラーバックも定義できるため、エラー処理も容易に行えます。この仕組みにより、イベント駆動型の抽象化を維持しつつ、コードを時系列に記述することができるのです。
スレッドのサポート:
Twistedは、Deferredへの入力としてスレッドを利用することで、スレッドの抽象化をサポートしています。スレッド処理の結果をDeferredとして受け取ることで、メインスレッドで動作するコールバックを定義し、複雑なロック処理を回避することができます。データベース呼び出しなどの時間のかかる処理を外部スレッドで行い、その結果をメインスレッドで受け取ることができます。
外部イベントループとの統合:
Twistedは、GTK、
Qt、Cocoaなどの外部イベントループと連携することができます。これにより、GUIアプリケーションのネットワーク層としてTwistedを利用することができ、
Pythonのネイティブライブラリのようにスレッドを過剰に消費することなく、効率的なネットワーク処理が可能になります。例えば、本格的な
WebサーバーをGUIアプリケーションと同じプロセス内で実行することも可能です。
Twistedの活用事例
Twistedを利用したアプリケーションとして有名なものには、Jaikuがあります。また、ITA Softwareが開発した
エア・カナダの航空券予約システムも、Twistedを広範囲に活用しています。
関連情報
Perl Object Environment: Perlプログラミング言語におけるTwistedに相当するフレームワークです。
Twisted Lore: Twistedチームが開発したドキュメント生成ツールです。
外部リンク
*
Twisted Matrix Labs HomePage