4

Pythonを使用してWebアプリケーションを開発することを計画しています。誰かがPython用のアクセラレータについて何か考えがありますか?(eAcceleratorやapc for phpのようなもの)そうでない場合、コンパイル済みのpythonバイトコードをキャッシュする方法はありますか?PythonとPHPのパフォーマンス比較に関するアイデア(db / networkのレイテンシーが同じであると仮定)

前もって感謝します。

4

4 に答える 4

8

これにはトリックがあります。

それはと呼ばれmod_wsgiます。

その本質はこのように機能します。

  1. 「静的」コンテンツ(.css、.js、画像など)の場合は、Pythonプログラムが送信されたことを認識せずに、Apacheによって提供されるようにディレクトリに配置します。

  2. 「動的」コンテンツ(メインHTMLページ自体)の場合mod_wsgi、Apacheの外部で実行される「バックエンド」プロセスをフォークするために使用します。

現在、いくつかのことが同時に行われているため、これはPHPよりも高速です。Apacheはリクエストをバックエンドプロセスにディスパッチし、バックエンドがまだ最初のリクエストを実行している間に次のリクエストを処理するために移動しました。

また、HTMLページを送信すると、Pythonプログラムが何が起こっているのかを認識したり気にしたりすることなく、後続のリクエストがApacheによって処理されます。これにより、大幅な高速化が実現します。Pythonの速度とは何の関係もありません。アーキテクチャ全体に関係するすべて。

于 2010-09-01T14:40:07.987 に答える
5

「メインスクリプト」(直接呼び出して、pythonを取得するスクリプト)__name__でささいな量の作業を行う限り、「__main__コンパイル済みのpythonバイトコードをキャッシュする」ことを心配する必要はありません。(同じディレクトリ)、そのディレクトリがあなたによって書き込み可能である限り、バイトコードへのすでに安価なコンパイルは一度だけ行われ、Pythonはそれを行うすべての新しいプロセスに直接ロードされます-単一のプロセス内で、1つ目は、メモリ内の辞書(辞書)をすばやく検索することです。Pythonのコアパフォーマンスのアイデア:実質的なコードのすべてのビットが内部で発生することを確認しますimport foofoo.pyfoo.pycfoo.pycimport fooimport foosys.moduledefモジュール内のステートメント-モジュールのトップレベル、メインスクリプト、またはespにはありません。execおよびevalステートメント/式!-)。

PHPとPythonのベンチマークはありませんが、Pythonは新しいリリースごとにかなり目立つように最適化され続けることに気づきました。そのため、「最速」を確認したい場合は、最新のリリース(理想的には2.7、少なくとも2.6)を比較してください。 Python」。まだ十分な速度が見つからない場合はcython(Cに直接コンパイルし、そこからマシンコードにコンパイルするように設計されたPython方言ですが、いくつかの制限があります)、プロファイリングで必要なモジュールを選択的に最適化する最も簡単な方法です。

于 2010-09-01T14:33:27.190 に答える
3

他の人はPythonバイトコードファイルについて言及していますが、それはほとんど無関係です。これは、CGIを除くPythonのホスティングメカニズムが、リクエスト間でPythonWebアプリケーションをメモリに保持するためです。これは、リクエスト間でアプリケーションを効果的に破棄するPHPとは異なります。そのため、Python Webホスティングメカニズムが機能する方法でPHPが抱える問題を回避できるため、Pythonはアクセラレータを必要としません。

于 2010-09-01T23:51:27.827 に答える
2

コンパイルされたPythonバイトコードは、私が見たすべての環境で自動的に.pycファイルにキャッシュされます。私の知る限り、他に何かをする必要があります。

これらのファイルを直接生成する場合は、次を使用できます: http: //docs.python.org/library/py_compile.html

于 2010-09-01T14:30:39.840 に答える