プロジェクト内の関数呼び出しの頻度を測定し、Pythonコードの他の側面(統計目的)をカウントできるツールはありますか?
ありがとうございました
プロジェクト内の関数呼び出しの頻度を測定し、Pythonコードの他の側面(統計目的)をカウントできるツールはありますか?
ありがとうございました
Pythonプロファイラーは、かなりの情報を提供するはずです。
python -m cProfile -o fooprof myscript.py
簡単なスクリプトを使用して結果をロードします。
#!/usr/bin/env python
import pstats
p = pstats.Stats('fooprof')
p.strip_dirs().sort_stats(-1).print_stats()
または、指定しない場合-o fooprof
、結果はstdoutに出力されます。
http://docs.python.org/library/profile.htmlのドキュメントを参照してください
カウントしたい「その他の側面」はわかりませんが、これにより、関数が呼び出される回数が決まります。呼び出しの「頻度」に関心がある場合は、合計実行時間と関数が呼び出された回数の関数としての平均頻度を見つけることができます。例えば:
10秒間foo()
に100回呼び出されたとします。その場合、呼び出しの平均頻度は10/秒です。
静的コード分析をしたいと思います。コード内で関数を呼び出す場所の数。
これは、Pythonのような動的言語で行うのは非常に困難です。これは、固有名以外の方法で関数を呼び出す方法が非常に多く、Pythonバイトコードコンパイラでさえ、ある場所で呼び出される関数を常に認識しているとは限らないためです。実行中にも変更される可能性があります。また、標準のOOポリモーフィズムもあります。
検討:
def doublefx(f, x):
return f(x)*2
print doublefx(math.sqrt, 9) # 6
f = stdin.readline()
print doublefx(getattr(math, f), 9) # ?
静的分析ツールは、math。*のどの関数がこのコードによって呼び出されるかを見つけることはできません。最初の例でさえ推論するのは非常に難しいでしょうが、2番目の例は不可能です。
次のツールは、複雑さに関する静的分析を行います。
PyLintやPyCheckerのような他の分析ツールは、スタイルと発生する可能性のあるエラーに焦点を当てています。
私はこれを使ったことがありませんが、 cProfileから始めるのが良いようです。(そのページで言及されている3つのプロファイラーのうち、1つ(ホットショット)は実験的で十分にサポートされていないことに注意してください。profile.py
およびのソースコードへのリンクpstats.py
は、ページの上部にあります。