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