2009-02-22 17 views
37

psycoは、Pythonコードを最適化するのに非常に役立つようですが、それは非常に非侵入的な方法で行います。いつもpsycoをPythonコードに使用するのはなぜですか?

したがって、疑問に思っています。 x86アーキテクチャ(これはほとんどのアプリケーションが最近稼働しているところです)にいると仮定すると、すべてのPythonコードに常にpsycoを使用するだけではないのですか?時々間違いを犯し、プログラムの正当性を失うか?いくつかの奇妙なケースの実行時間を増やしますか?

マイナスの経験がありましたか?これまでの私の最も否定的な経験は、私のコードを15%だけ速くすることでした。通常それは良いです。

もちろん、psycoを使用することは、効率的なアルゴリズムとコーディングを置き換えるものではありません。しかし、2行のコスト(psycoをインポートして呼び出す)のためにコードのパフォーマンスを向上させることができれば、そうしないとよい理由は見当たりません。

答えて

20

1)他の回答に記載されているように、メモリオーバーヘッドが主なものです。また、編集費用も支払われます。これは、あなたが選択的でない場合には禁止される可能性があります。 user reference

中規模または大規模のアプリケーションでは、すべてをコンパイルすることはしばしば不当です。あまりにも多くのコンパイルの欠点は、コンパイルに費やされた時間と、このプロセスが消費するメモリ量です。維持する微妙なバランスです。

2)パフォーマンスはPsycoコンパイルによって実際に害される可能性があります。ユーザーガイド("known bugs"セクション)から再度

パフォーマンスバグもあります。Psycoがコードを加速するのではなく、速度を落とす状況もあります。考えられる理由の完全なリストを作ることは困難であるが、ここではいくつかの一般的なものです:

  • ビルトインmapfilter機能がリスト内包することで回避し、交換する必要があります。たとえば、map(lambda x: x*x, lst)は、より読みやすく、より新しい構文[x*x for x in lst]に置き換える必要があります。
  • 正規表現の編集にはPsycoのメリットはありません。 (正規表現の実行はCコードなので影響はありません)Psycoをこのモジュールで有効にしないでください。必要に応じて明示的に無効にします。 psyco.cannotcompile(re.compile)に電話してください。

3)最後に、実際にバグを紹介しますサイコを使用して、いくつかの比較的あいまいな状況があります。それらのいくつかはlisted hereです。

5

私はpygletを使用しているとき、私はアプリ全体にpsycoを使用することができないことがわかりました。もちろん、それは数学的に重いコードの小さな部分でも使うことができましたが、必要ではなかったので、私は気にしませんでした。

また、psycoはプロファイリングの結果(psyco以外のバージョンからはまったく変更しないなど)で奇妙なことを行っています。私はプロファイリングコードではうまくいきません。

私はスピードを本当に望んでいない限り、実際にはそれを使用していません。私の優先事項はアルゴリズムの最適化です。これは一般的にスピードアップの向上につながります。

4

ボトルネックの場所によっても異なります。私は主にWebアプリケーションを実行しており、ボトルネックはおそらくIOとデータベースの増加です。したがって、最適化する場所を知っておく必要があります。

また、psycoを直接投げるのではなく、まず自分のコードについて考える必要があるかもしれません。だから私はDevinに同意します。アルゴリズムの最適化が最初に行われるべきであり、望ましくない副作用の可能性がより低くなる可能性があります。

+1

+1:最適化する場所を知る必要があります。あなたが間違ったアルゴリズムを持っていれば、Psycoはあまり役に立たないでしょう。正しいアルゴリズムがあれば、Psycoは問題になりません。 –

6

現在、Psycoは多くのメモリを使用しています。 これはIntel 386互換のプロセッサー (いずれのOSでも使用可能)上でのみ動作します。 Pythonが動作する方法に若干の意味があります。 違い(バグ)です。ほとんどのプログラムで明らかになるのは ではありません。

caveats sectionも参照してください。難しい例として、Cheetahで生成されたテンプレートとDB I/Oを備えたWebアプリケーションでは、スピードアップが見られませんでした。

1

簡単に言うと、「コードはすでに十分速く実行されているからです。

3

あなたの問題を解決するために魔法の弾丸に頼るべきではありません。 psycoを使って遅いプログラムを速くするのは、通常は必要ありません。不正なアルゴリズムは書き換えられ、にはの速度が必要ですが、他の言語でも書かれています。もちろん、あなたの質問では、なぜスピードブーストに使用しないのかを質問しています。psycoを使用すると、少しオーバーヘッドがあります。 Psycoはメモリを使用しています。その2行はちょうどのようなものです。見てみるとオーバーヘッドのように感じます。 psycoを使わない理由についての私の個人的な理由は、それがx86_64をサポートしていないからです。これは、新しく登場するアーキテクチャー(特に2038年が近づくにつれて)です。私の代案は、ピピですが、私はそれも全く好きではありません。

2

他の物事のカップル:

  1. 非常に積極的に維持されていないようです。
  2. メモリホッグにすることができます。
3

psycoは死んでおり、もはや維持されていません。それは別のものを見つける時間です

関連する問題