これらのフレームワーク/ライブラリのうち、最新のマルチユーザー Web アプリケーションを構築するのに最適な選択肢はどれですか? 簡単にスケーリングできる非同期 Web サーバーが欲しいです。最高のパフォーマンス/スケーラビリティ/最も有用なフレームワーク(使いやすさと開発のしやすさの観点から) を提供するソリューションはどれですか?
優れた機能(websockets、rpc、ストリーミングなど)を提供できれば素晴らしいことです。
各ソリューションの長所と短所は何ですか?
「Djangoは、迅速な開発とクリーンで実用的な設計を促進する高レベルの Python Web フレームワークです」 . e コマース サイトに似たものを構築している場合は、おそらく Django を使用する必要があります。それはあなたの仕事を素早く終わらせます。あまりにも多くのテクノロジーの選択肢について心配する必要はありません。テンプレート エンジンから ORM まで、必要なものをすべて提供します。アプリを構築する方法については少し意見が分かれますが、私に尋ねればそれは良いことです。また、他のすべてのライブラリの中で最も強力なコミュニティを持っているため、簡単にヘルプを利用できます。
「Flaskは、Werkzeug、Jinja 2、および善意に基づく Python 用のマイクロフレームワークです」 . 注意 - 「マイクロフレームワーク」は誤解を招く可能性があります。これは、Flask が中途半端なライブラリであるという意味ではありません。これは、フラスコのコアが非常に単純であることを意味します。Django とは異なり、技術的な決定を行うことはありません。気に入ったテンプレート エンジンまたは ORM を自由に選択できます。デフォルトで Jinja テンプレート エンジンが付属していますが、独自のテンプレート エンジンをいつでも自由に選択できます。私の知る限り、Flask は API エンドポイント (RESTful サービス) を作成するのに便利です。
「Twistedは Python で書かれたイベント駆動型ネットワーク エンジンです」 . 高性能エンジンです。その速度の主な理由は、遅延と呼ばれるものです。Twisted は deferred の上に構築されています。defered を知らない方のために説明すると、これは非同期アーキテクチャによって実現されるメカニズムです。Twisted は非常に高速です。ただし、従来の Web アプリケーションの作成には適していません。低レベルのネットワーキングを行いたい場合は、twisted が最適です。
" Tornadoは、もともと FriendFeed で開発された Python Web フレームワークおよび非同期ネットワーク ライブラリです。非ブロッキング ネットワーク I/O を使用することで、Tornado は数万のオープン接続に拡張できるため、ロング ポーリング、WebSocket、およびその他のアプリケーションに最適です。各ユーザーへの長時間の接続を必要とする」 . Tornado は、Django と Flask の間のどこかに立っています。Django または Flask で何かを書きたいが、より良いパフォーマンスが必要な場合は、Tornado を選ぶことができます。正しく設計されていれば、C10k の問題をうまく処理できます。
「Cycloneは、Tornado API を Twisted プロトコルとして実装する Python 用の Web サーバー フレームワークです」 . では、Twisted とほぼ同じパフォーマンスでありながら、従来の Web アプリケーションを簡単に作成できるものが必要な場合はどうすればよいでしょうか? サイクロンによろしく。トルネードよりサイクロンの方が好き。Tornado に非常によく似た API があります。実のところ、これはトルネードのフォークです。しかし問題は、コミュニティが比較的小さいことです。Alexandre Fiori は、レポの唯一のメイン コミッターです。
「Pyramidは、一般的なオープン ソースの Python Web アプリケーション開発フレームワークです。その主な目標は、Python 開発者が Web アプリケーションを簡単に作成できるようにすることです。」私は Pyramid を実際に使用したことはありませんが、ドキュメンテーションに目を通してみました。私が理解していることから、Pyramid は Flask に非常に似ており、Flaskが適切と思われる場所ならどこでも Pyramid を使用でき、その逆も可能だと思います。
EDIT : 他のフレームワークのレビュー依頼は大歓迎です!
これは明らかに偏った回答ですが、間違った回答とは異なります。常に Twisted を使用する必要があります。以前にも同様の質問に回答したことがありますが、あなたの質問はまったく同じではないため、いくつかの理由を次に示します。
Twisted はspeed.twistedmatrix.com Web サイトでパフォーマンスを継続的に監視しています。私たちはまた、PyPy の同様のサイト によって監視された最初のプロジェクトの 1 つでした。これにより、Python の高性能アプリケーションに関係する誰もが実行時に Twisted の優れたパフォーマンスを保証することができました。
私の知る限り、リストされているフレームワークには、自動スケーリングのサポートが組み込まれているものはありません。それらはすべて通信フレームワークであるため、スケーリング ノード間で通信するための作業を行う必要があります。ただし、Twisted にはローカル マルチプロセッシングのサポートが組み込まれているという利点があります。公平を期すために、Tornado にはサードパーティ製のアドオンがあり、同じことができます。最近のリリースでは、Twisted はコア間で作業を共有できる方法の数を増やす機能を追加しており、その分野での作業が進行中です。Twisted には、よく統合された「ネイティブ」なRPC プロトコルもいくつかあり、追求したいスケーリングのイディオムを構築するためのキットを提供します。
多くの人が Twisted を非常に便利だと思っているようです。 彼らの多くがそれを拡張し、拡張機能を利用できるようにしたほどです。
箱から出してすぐに、Twisted には以下が含まれます。
少なくともこの最後の部門では、組み込み機能に関しては Twisted が明らかに勝者のようです。そして、これらすべてが 2 メガバイト強のパッケージに収められています。
@Glyph レスポンスが好きです。Twisted は非常に包括的でリッチな Python フレームワークです。ツイステッドとトルネードのデザインはよく似ています。そして、私はこのデザインがとても好きです:
しかし、私が好きで最近人気を博しているトルネードを強調したいと思います。Tornado は、Twisted と同様にコールバック スタイルのプログラミングを使用しますが、tornado.gen.engine
( twisted.internet.inlineCallbacks
Twisted では) を使用してインライン化できます。
最高のコメントはhttp://cyclone.ioサイトからのものです。サイクロンが Twisted と Tornado を混ぜようとする理由は次のとおりです。
Twisted は、一般に公開されているノンブロッキング I/O の最も成熟したライブラリの 1 つです。Tornado は FriendFeed の Web サーバーのオープン ソース バージョンであり、Python 用の最も人気があり高速な Web サーバーの 1 つであり、Web アプリケーションを構築するための非常に優れた API を備えています。
アイデアは、Tornado のエレガントで簡単な API を Twisted の Event-Loop に橋渡しし、サポートされている膨大な数のプロトコルを有効にすることです。
しかし、2011 年には、tornado.platform.twisted
同様の機能を提供する製品が出てきました。
Tornado のパフォーマンスははるかに優れています。また、PyPy とシームレスに連携し、大きな利益をもたらします。
ツイストと同じ。Tornado にはtornado.process
、その上に多数の rpc サービスが実装されています。
148 の Twisted と 48 の Gevent に比べて、71 の Tornado ベースのパッケージがあります。しかし、注意してパッケージのアップロード時間の中央値を計算すると、Twisted が最も古く、Gevent と Tornado が最も新しいことがわかります。さらに、Tornado で Twisted 用に書かれたコードtornado.platform.twisted
を実行できるようにするモジュールがあります。
Tornado では、Twisted のコードを使用できます。コードをひねるだけのサイクロンを使用する必要はありません(コードがより乱雑になります)。
2014 年の時点では、Tornado は、python2 と python3 の両方で動作する、広く受け入れられているデフォルトの非同期フレームワークと見なされています。また、最新バージョン 4.x は、https://docs.python.org/dev/library/asyncio.htmlから多くの機能をもたらします。
Tornado は最高の Python Web フレームワークであり、Tornado の機能について詳しく書いた記事を書きました。
(更新: ここで Gevent を推奨したり言及したりする回答がほとんどないことに悲しいことに驚いています。この優れたライブラリの人気、パフォーマンス、使いやすさに比例しているとは思いません!)
Gevent と Twisted は相互に排他的ではありませんが、最初はその反対が明白に見えるかもしれません。geventreactor
両方の長所を比較的スムーズに活用できるプロジェクトがあります。
inlineCallbacks
。使いやすさ/透明性の条件:yield
どこDeferreds
でも。多くの場合、いくつかの抽象化を構築するのは困難です。裸Deferred
のと の両方で、恐ろしく役に立たないスタック トレース@inlineCallbacks
。IReactorProcess.spawnProcess
。私は現在、Gevent 1.0rc2 を Twisted 12.3 でブリッジして使用していgeventreactor
ます。まだ公開されていない独自の追加機能と拡張機能を実装しましたが、geventreactor
これはすぐに公開する予定geventreactor
です。
私の現在のレイアウトでは、Gevent の優れたプログラミング モデルでプログラミングし、ノンブロッキング やその他のモジュールなどを活用できsocket
ますurllib2
。Twisted の方法で単純で基本的なことを行うことの学習曲線と不都合とは対照的に、私は通常のことを行うために通常の Python コードを使用できます。また、通常は Twisted では問題外であるか、スレッドの使用が必要なサードパーティ ライブラリのほとんどを簡単に使用できます。
Deferred
また、グリーンレットを使用することで (やコールバック、および/または の代わりに)、面倒でしばしば過度に複雑なコールバック ベースのプログラミングを完全に回避することもできます@inlineCallbacks
。
(この回答は、実際のプロジェクトで Twisted と Gevent の両方を使用した私の個人的な経験に基づいて書かれたもので、Twisted を使用した経験がかなり豊富です (ただし、私は Twisted の専門家であるとは主張していません)。あまり多くの Twisted の機能を使用する必要はなかったので、必要な Twisted の機能のセットによっては、Gevent と Twisted を混在させる (比較的簡単な) 余分な複雑さは問題に値しないかもしれません。)