web-dev-qa-db-ja.com

トルネードを使用する場合、ツイスト/サイクロン/ GEvent /その他を使用する場合

これらのフレームワーク/ライブラリのうち、最新のマルチユーザーWebアプリケーションを構築するのに最適な選択肢はどれですか?簡単に拡張できる非同期Webサーバーが欲しいです。 最高のパフォーマンス/スケーラビリティ/最も有用なフレームワーク(使いやすさと開発の容易さの点で)を与えるソリューションはどれですか?

良い機能性(websockets、rpc、streamingなど)を提供するのであれば素晴らしいでしょう。

各ソリューションの長所と短所は何ですか?

181
Wojciech Danilo

"Djangoは高レベルのPython Webフレームワークです迅速な開発とクリーンで実用的なデザインを促進します」。電子商取引サイトに似たものを構築する場合は、おそらくDjangoを使用する必要があります。作業が迅速に完了します。テクノロジーの選択が多すぎることを心配する必要はありません。テンプレートエンジンからORMに必要なすべてのものを提供します。アプリを構成する方法については少し意見が分かれますが、私に尋ねればそれは良いことです。また、他のすべてのライブラリの中で最も強力なコミュニティを持っているため、簡単なヘルプが利用できます。

"Flaskは、Werkzeugに基づくPythonのマイクロフレームワークです、ジンジャ2と善意」。注意-「マイクロフレームワーク」は誤解を招く可能性があります。これは、Flaskが中途半端なライブラリであることを意味しません。これは、flaskのコアが非常に単純であることを意味します。 Djangoとは異なり、テクノロジーに関する決定は行いません。任意のテンプレートエンジンまたはORMを自由に選択できます。デフォルトではJinjaテンプレートエンジンに付属していますが、独自のテンプレートエンジンを自由に選択できます。私の知る限り、FlaskはAPIエンドポイント(RESTfulサービス)の作成に役立ちます。

"Twistedは、Pythonで記述されたイベント駆動型ネットワーキングエンジンです。"。これは高性能エンジンです。その速度の主な理由は、遅延と呼ばれるものです。 Twistedは遅延オブジェクトの上に構築されます。延期について知らない人にとっては、非同期アーキテクチャを介したメカニズムが実現されます。 Twistedは非常に高速です。しかし、従来のwebappの作成には適していません。低レベルのネットワーキングをしたいなら、twistedがあなたの友達です。

"TornadoはPython Webフレームワークおよび非同期ネットワークですもともとFriendFeedで開発されたライブラリ。Tornadoは非ブロッキングネットワークI/Oを使用することで、数万のオープン接続に拡張できるため、各ユーザーへの長時間の接続を必要とする長いポーリング、WebSocket、およびその他のアプリケーションに最適です「。竜巻は、DjangoとFlaskの間の場所にあります。 DjangoまたはFlaskで何かを書きたいが、より良いパフォーマンスが必要な場合は、Tornadoを選択できます。適切に設計されていれば、C10kの問題を非常にうまく処理できます。

"CycloneはPythonのWebサーバーフレームワークですTornado APIをTwistedプロトコルとして実装します」。さて、Twistedとほぼ同じ性能であるが、従来のwebappを簡単に作成できるものが必要な場合はどうでしょうか。サイクロンに挨拶します。私は竜巻よりもサイクロンを好むでしょう。 Tornadoに非常によく似たAPIがあります。実際のところ、これはトルネードのフォークです。しかし問題は、比較的小さなコミュニティがあることです。アレクサンドル・フィオーリがレポの唯一の主要なコミッターです。

"Pyramidは一般的なオープンソース、Python Webアプリケーション開発フレームワーク。その主な目標は、Python開発者がWebアプリケーションを簡単に作成できるようにすることです。」Pyramidを実際に使用したことはありませんが、ドキュメントを確認しました。私が理解していることから、ピラミッドはFlaskに非常に似ており、Flaskが適切と思われる場所ならどこでもPyramidを使用できると思いますおよびその逆。

EDIT:他のフレームワークのレビューのリクエストを歓迎します!

ソース: http://dhilipsiva.com/2013/05/19/python-libraries-Django-twisted-tornado-flask-cyclone-and-pyramid.html

216
dhilipsiva

これは明らかに やや偏った の回答ですが、それは 間違った の回答とは異なります。常にTwistedを使用する必要があります。 類似した質問 に答えましたが、あなたの質問はまったく同じではないので、いくつかの理由があります:

"最高のパフォーマンス"

Twistedは speed.twistedmatrix.com ウェブサイトでパフォーマンスを継続的に監視しています。私たちは最初のプロジェクトの1つでもありました PyPyの同様のサイトで監視される 。これにより、Pythonの高性能アプリケーションに関係する誰もがランタイムでTwistedの良好なパフォーマンスを保証します。

「スケーラビリティ」

私の知る限り、リストされているフレームワークには自動スケーリングのサポートが組み込まれていません。それらはすべて通信フレームワークなので、スケーリングノード間で通信するための作業を行う必要があります。ただし、Twistedには ローカルマルチプロセッシングの組み込みサポート の利点があります。公平には、 Tornadoのサードパーティアドオン があり、同じことを行うことができます。最近のリリースでは、 Twistedは機能を追加しました コア間で作業を共有できる方法の数を増やし、その分野で作業が進行中です。 Twistedには、いくつかのスケーリングイディオムを追求するための構築キットを提供する well-integrated"native" RPCプロトコルもいくつかあります。

"一番便利"

たくさんの人 Twistedを見つけているようです 非常に便利です多くの人がそれを拡張し、拡張機能を利用できるようにした。

「機能」

すぐに使えるTwistedには以下が含まれます:

この最後の部門では、少なくとも、Twistedが組み込み機能の明確な勝者のようです。これらすべてが、2メガバイト強のパッケージで!

57
Glyph

@Glyph応答が好きです。 Twistedは非常に包括的な、豊富なpythonフレームワークです。 TwistedとTornadoのデザインは非常に似ています。そして、私はこのデザインがとても好きです:

  • これは速い
  • 分かりやすい
  • 拡張が簡単
  • c-extensionsは必要ありません
  • pyPyで動作します。

しかし、Tornadoを強調したいと思います。 TonadoはTwistedと同様にコールバックスタイルのプログラミングを使用しますが、tornado.gen.engine(Twistedではtwisted.internet.inlineCallbacks)を使用してインライン化できます。

コードベース

最良のコメントは http://cyclone.io サイトからです。 cycloneは、以下の理由でTwistedとTornadoの混合を試みます。

Twistedは、一般に利用可能なノンブロッキングI/O用の最も成熟したライブラリの1つです。 TornadoはFriendFeedのウェブサーバーのオープンソースバージョンであり、Pythonで最も人気があり高速なウェブサーバーの1つであり、ウェブアプリケーションを構築するための非常にまともなAPIを備えています。

アイデアは、Tornadoのエレガントで簡単なAPIをTwistedのEvent-Loopにブリッジし、サポートされている膨大な数のプロトコルを有効にすることです。

しかし、2011年にtornado.platform.twistedがリリースされ、同様の機能がもたらされました。

性能

Tornadoの方がはるかに優れています パフォーマンス 。また、PyPyとシームレスに連携し、大きな利益を得ます。

拡張性

Twistedと同じです。 Tornadoにはtornado.processとその上に実装された多くのrpcサービスがあります。

機能性

71個あります 148個のTwistedおよび48個のGeventと比較して、Tornadoベースのパッケージ。しかし、注意深く見て、パッケージのアップロード時間の中央値を計算すると、ツイストのパッケージが最も古く、GeventとTornadoが最も新鮮であることがわかります。さらに、TornadoでTwisted用に記述されたコードを実行を可能にするtornado.platform.twistedモジュールがあります。

概要

トルネードを使用すると、Twistedのコードを使用できます。コードをtwistsするだけのサイクロンを使用する必要はありません(コードが複雑になります)。

2014年に関しては、Tornadoはpython2とpython3の両方で動作する、広く受け入れられているデフォルトの非同期フレームワークと見なされています。また、最新バージョン4.xは https://docs.python.org/dev/library/asyncio.html から多くの機能を提供します。

記事を書いて、なぜ Tornado-最高のPythonウェブフレームワーク と思うかを説明する記事を書きました。

46
Robert Zaremba

UPDATE:残念ながら、ここで回答がGeventを推奨したり言及したりすることに驚いています。人気に比例するとは思わない、この優れたライブラリのパフォーマンスと使いやすさ!)

GeventとTwistedは、最初は相反しているように見えるかもしれませんが、相互に排他的ではありません。 geventreactorと呼ばれるプロジェクトがあります。これにより、両方の長所を比較的スムーズに活用できます。

  • Geventの効率的で安価な(協調的なグリーン)スレッドモデルは、並行性に関してはプログラミングがはるかに簡単です。率直に言って、TwistedのinlineCallbacksは、多くのコルーチンに関してはパフォーマンスの点で単純に仕事に任せていません。使いやすさ/透明性の観点から:どこでもyieldおよびDeferreds;多くの場合、いくつかの抽象化を構築することは困難です。むきだしのDeferredsだけでなく、@inlineCallbacksの場合も、恐ろしく無用なスタックトレースです。
  • IReactorProcess.spawnProcessを含むがこれに限定されない、あなたが夢見ることができるTwistedのすべての組み込み機能。

私は現在、geventreactorによってブリッジされたTwisted 12.3でGevent 1.0rc2を個人的に使用しています。私は、geventreactorのまだ公開されていない追加および拡張機能を実装しましたが、geventreactorの元のGitHubリポジトリの一部として、まもなく公開します: https://github.com/jyio/geventreactor .

現在のレイアウトでは、GeventのNiceプログラミングモデルでプログラミングでき、非ブロッキングsocketurllib2およびその他のモジュールなどを活用できます。 Twistedのように単純で基本的なことを行うという学習曲線や不便さとは対照的に、通常のことをするために通常のPythonコードを使用できます。また、通常Twistedでは問題にならないか、スレッドの使用を必要とするほとんどのサードパーティライブラリを簡単に使用できます。

また、グリーンレット(Deferredsとコールバック、および/または@inlineCallbacksの代わりに)を使用することで、厄介でしばしば複雑すぎるコールバックベースのプログラミングを完全に回避できます。

(この答えは、実際のプロジェクトでTwistedとGeventの両方を使用した私の個人的な経験に基づいて書かれました(ただし、Twistedの使用経験はかなりあります)。 Twistedの機能をあまり多く使用する必要がなかったので、Twistedに必要な機能のセットによっては、GeventとTwistedの混合の(比較的痛みのない)余分な複雑さは問題にならないかもしれません)

15
Erik Allik