私はテストスイートを持っていて、テストしています。私がfrom memory_profiler import profile
を適切なファイルの先頭に置き、プロファイリングしたい機能を@profile
で装飾し、標準的な方法でpython TestThing.py
で実行すると、すばらしい行単位の結果が得られます。Pythonでunittestsをタイムプロファイリングするにはどうすればよいですか?
しかし、この方法では、line_profilerはパッケージには含まれていません。私がそれを使って何かをプロファイルできる唯一の方法は、kernprof -l -v thing.py
です。私が単体テストで使用すると、テストは実行されません(実際には意外ではありません)。結果は生成されません。私のテストと、それらが使用するコードを、memory_profilerに類似した方法でタイムプロファイリングするにはどうすればよいですか?当然の
これの修正が働いている:輸入line_profilerを、そのクラスの静的プロファイラ= line_profiler.LineProfilerを宣言します。次に@profilerで関数を修飾します。次に、これらの関数の最後にClassName.profiler.dump_stats( 'method.lprof')を呼び出します。そして、python -m line_profiler method.lprofでそれらを読んでください。しかし、このばかげていないですか?後で削除する必要があるコードにその行を追加したくないのです。よりクリーンな方法がありますか? – pvlkmrv
どの部分がきれいではありませんか? – georgexsh
memory_profilerの場合、私はオブジェクトをインスタンス化する必要はなく、プロファイリングされた関数が実行された後にdump_statsメソッドを呼び出す心配はありません。私は時間プロファイリングのこの方法で作業することができますが、それは必要以上の仕事です。 – pvlkmrv