web-dev-qa-db-ja.com

CythonをDjangoで使用する。それは意味がありますか?

CythonでDjangoで開発されたミッションクリティカルなアプリケーションの速度を最適化することは可能ですか?

最近インターネットで読んだところによると、CythonはPythonコードをCのような速度に変えることができます。これはDjangoで可能ですか?

36
fear_matrix

CythonでDjango)で開発されたミッションクリティカルなアプリケーションの速度を最適化することは可能ですか?

それは疑わしいです。

Webアプリケーションの応答時間のほとんどは、HTML以外の要素であり、個別にダウンロードする必要があります。通常の経験則では、HTMLページごとに8つの静的ファイルがあります。 (.CSS、.JS、画像など)

その静的コンテンツはいずれもDjangoからのものではないため、WebアプリケーションのタイムラインのほとんどはApache(またはNginxまたはDjango外の他のサーバーソフトウェア)です。

HTMLを生成する時間だけを見ると、ほとんどの時間がデータベースの待機に費やされていることがわかります(メモリ内のSQLiteであっても、データベースがタイムラインを支配する傾向があることがわかります)。

Apacheの作成が完了し、データベースが高速になったら、-そしてそのときだけ-Python要素を検討できます。

結論。 DjangoおよびPythonを高速化するために時間を無駄にしないでください。

31
S.Lott

ええ、そうですが、Webアプリが行うほとんどのことは、そうなるという確固たる証拠がない限り、この種の変更の恩恵を受けることはありません。プロファイルを2回、最適化を1回。

概念的にはあなたが求めていることは可能ですが、あなたは間違った方向を見ています。

Django(およびPython)コミュニティにとって非常に有望なテクノロジーであるPyPyに本当に興味があるはずです。 PyPyのDjangoのベンチマークは、通常のPythonと比較した場合、すでに12.5Xの速度ゲインを示しています。フロントエンドの静的リソースがエンドユーザーへのページの応答性の大部分に寄与する可能性がありますが(上記のS.Lottの回答による)、これはサーバー側での速度の向上が非常に重要であるという現実に対処していません。 Facebookはこの理由でHipHopPHPを発明しなければなりませんでした...PHPの遅れはそれをカットできませんでした。家の近くでは、Meebo(python主導のサイト)がサーバーインフラストラクチャに月に数万米ドルを費やしていると考えてください。 PyPyでサーバーのコスト削減を味わうことができますか?セクシー!

ベンチマークを確認してください: http://speed.pypy.org/

11
Archie1986

他の答えを反映して、もちろん、何らかの利益が得られる可能性のある特定のケースをプロファイルしていない限り、これによって特定の利益が得られる可能性はほとんどありません。

答えに加えて、YahooのWebチームからのWeb最適化のリストを指摘したいと思います。これらは、多くのWebサイトに適用可能であり、調査する価値のある分野で測定され、実証された利益です。

Exceptional Performanceチームは、Webページを高速化するためのいくつかのベストプラクティスを特定しました。このリストには、7つのカテゴリに分類された35のベストプラクティスが含まれています。

5
ars

InProd という顧客サイトにインストールされるアプリケーションを構築しました。このアプリケーションは、Genesysを利用したコンタクトセンターの構成を管理します。これは、CythonでコンパイルされたDjangoアプリケーションです。

速度の向上はありますが、それほど大きくはありません。 1秒あたりに多くのリクエストを処理する必要があり、これを行う際の主な遅延はデータベースが原因です。最大のメリットは、データベースの調整と優れたSQLによって実現されることです。

あなたはそれが進行中の問題を引き起こすようなことをするために本当に強い必要性を持っている必要があります、それは私たちのテスト要件を増やします。

一部のタスクではパフォーマンスの違いが大きくなる可能性がありますが、すべてではありません。したがって、改善はアプリケーションの実行内容によって異なります。

4
oden

バックエンド側に重いプロセスがあるかどうかによって異なります。私の場合、プロセスの1つを改善し、最大5倍の速度を上げることができます。ユーザーが入力した大きなXMLファイルを作り直してデータベースに保存する機能がありました。 Cythonに、入力または出力が文字列である場所があることを伝えると、5倍のスピードアップの魔法が行われました。

1
Kingindanord