私はPythonモジュール(swood
)を作成しました。最近まで、多くのクラスを持つ1つの大きなファイルでした。関連するクラスを別々のファイルにリファクタリングした後も、すべてが動作しますが、約50%遅くなります。私は、Pythonが各ファイルのバイトコードをより効率的にキャッシュできるので、起動時間を改善できるので、少し速くなると思っていました。なぜ私のモジュールを複数のファイルに分けるのが遅くなるのですか?
私はこのコードをCPythonで実行しています(PyPyとそのilkでテストされていません)。私は古いバージョンとリファクタリングされたバージョンでline_profiler
を実行しました。そして、各ラインで費やされる処理時間の割合は、リファクタの前後でほぼ同じに見えます。ここで
はそれとは何かを持っているかもしれない私のプログラムについてのいくつかのものがあります:
- これは以前に問題ではありませんでしたがそれは、
Note
これらは高価であるかもしれないインスタンス化するような小さなクラスの多くを作りますリファクタリング。 - これらのクラスを作成するときは、最初に
import
を別のファイルから取得します。 最長かかる部分(
scalingと
mixingオーディオ)
- で起こっ
numpy
ベースの配列操作がたくさんある - 私は彼らが回以上を使用している場合、私は、中にスケールノートを保存するキャッシュを持っています7.5秒。 (code)
私のコードは何もせずに複数のファイルに分けた後に遅くなる原因は何ですか?
あなたはおそらく、いくつかの点でめちゃめちゃ:元のループは を置き換えることができます。コードをより多くのモジュールに分けると、すべてのモジュールを読み込むのに少し時間がかかることになりますが、その減速は報告するものよりずっと少なくなります。明らかに一見遅くなって私に飛びついたことはありませんでしたが、あなたのコードにバグがないと思われる奇妙なもの( '__hash__'のような' __eq__'など)がありました。 – user2357112