41

psycoは、Python コードの最適化に非常に役立つようで、非常に非侵入的な方法で実行します。

したがって、疑問に思う必要があります。あなたが常に x86 アーキテクチャ (最近ではほとんどのアプリが実行されている場所) を使用していると仮定するとpsyco、すべての Python コードに対して常に x86 を使用しないのはなぜでしょうか? 時々間違いを犯し、プログラムの正確性を台無しにしますか? いくつかの奇妙なケースの実行時間を増やしますか?

それについて否定的な経験はありましたか?これまでの私の最も否定的な経験は、コードが 15% だけ速くなったことです。通常はその方が良いです。

当然のことながら、psyco の使用は、効率的なアルゴリズムとコーディングの代わりにはなりません。しかし、2 行 (サイコのインポートと呼び出し) のコストでコードのパフォーマンスを改善できるのであれば、そうしない正当な理由はないと思います。

4

8 に答える 8

22

1)他の回答で説明されているように、メモリオーバーヘッドが主なものです。また、コンパイルのコストもかかります。ユーザーリファレンスから:

中規模または大規模なアプリケーションの場合、すべてをコンパイルするのはやり過ぎです。コンパイルが多すぎることの欠点は、コンパイルにかかる時間と、このプロセスが消費するメモリ量にあります。保つのは微妙なバランスです。

2) Psyco のコンパイルによってパフォーマンスが実際に損なわれる可能性があります。再びユーザーガイドから(「既知のバグ」セクション):

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

  • 組み込み関数mapfilter関数は避けて、リスト内包表記に置き換える必要があります。たとえばmap(lambda x: x*x, lst)、より読みやすいがより新しい構文に置き換える必要があります[x*x for x in lst]
  • 正規表現のコンパイルは Psyco の恩恵を受けていないようです。(C コードであるため、正規表現の実行は影響を受けません。) このモジュールで Psyco を有効にしないでください。必要に応じて、たとえば を呼び出して、明示的に無効にしpsyco.cannotcompile(re.compile)ます。

3) 最後に、Psyco を使用すると実際にバグが発生する、比較的目立たない状況がいくつかあります。それらのいくつかはここにリストされています

于 2009-09-17T10:23:30.663 に答える
6

Psyco は現在多くのメモリを使用しています。現在、Intel 386 互換プロセッサ (任意の OS) でのみ動作します。Python の動作には、微妙な意味上の違い (バグなど) がいくつかあります。それらは、ほとんどのプログラムでは明らかではありません。

警告セクションも参照してください。難しい例として、Cheetah で生成されたテンプレートと DB I/O を使用した Web アプリが、それほど高速化されていないことに気付きました。

于 2009-02-22T18:45:14.390 に答える
5

pyglet を使用すると、アプリを機能させない限り、アプリ全体で psyco を使用できないことがわかりました。もちろん、数学を多用するコードの小さなセクションで使用することもできましたが、必要ではなかったので気にしませんでした。

また、psyco は私のプロファイリング結果で奇妙なことをしました (たとえば、非 psyco バージョンからまったく変更しないなど)。プロファイリングコードとうまく機能しないと思います。

本当に速度が必要でない限り、私は実際には使用しませんが、それはそれほど頻繁ではありません. 私の優先事項は、アルゴリズムの最適化です。これにより、通常はより高速になります。

于 2009-02-22T18:26:25.090 に答える
4

サイコは死んでおり、もはや維持されていません。別のものを見つける時が来ました

于 2012-09-17T20:53:44.447 に答える
4

また、ボトルネックがどこにあるかにもよります。私は主に Web アプリを使用していますが、ボトルネックはおそらく IO とデータベースの増加です。したがって、最適化する場所を知っておく必要があります。

また、サイコを直接投げるのではなく、最初にコードについて考える必要があるかもしれないことに注意してください。したがって、アルゴリズムの最適化が最初に行われるべきであり、望ましくない副作用の可能性が低くなる可能性があるという Devin に同意します。

于 2009-02-22T18:39:53.093 に答える
3

問題を解決するために魔法の弾丸に頼ってはいけません。遅いプログラムをより速くするためにpsycoを使用することは通常必要ではありません。悪いアルゴリズムは書き直される可能性があり、速度が必要な部分は別の言語で書かれる可能性があります。もちろん、あなたの質問は、なぜ私たちがとにかくスピードブーストのためにそれを使用しないのかを尋ねます、そしてあなたがpsycoを使用するとき少しのオーバーヘッドがあります。Psycoはメモリを使用しますが、これらの2行を見ると、オーバーヘッドのように感じられます。psycoを使用しない個人的な理由としては、x86_64をサポートしていないためです。x86_64は、新しいアーキテクチャと見なされます(特に、遅かれ早かれ2038が近づいています)。私の代替案はpypyですが、私もそれが完全に好きというわけではありません。

于 2009-02-23T02:43:57.673 に答える
1

簡単に言うと、「コードはすでに十分に高速に実行されているため」です。

于 2009-02-22T21:24:38.593 に答える