I)はcProfileはかなりしっかりしていると言う、とdate.now(のようなものを使用しての確かな改善と思います。ここでは何cProfileがあります無用とわずかに無駄なフィボナッチの比較のために生成するジェネレータ。ここで
$ python -m cProfile script.py
4113777 function calls (1371305 primitive calls) in 1.337 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 cProfile.py:5(<module>)
1 0.000 0.000 0.000 0.000 cProfile.py:66(Profile)
1 0.009 0.009 1.337 1.337 script.py:1(<module>)
2692508/30 1.069 0.000 1.268 0.042 script.py:3(fib)
74994/25000 0.058 0.000 0.058 0.000 script.py:9(fibber)
1346269 0.200 0.000 0.200 0.000 {max}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.001 0.000 0.001 0.000 {range}
は、私が使用するコードです:
import cProfile
def fib(num):
if num < 3:
return max(num, 1)
return fib(num - 1) + fib(num - 2)
fibdict = {0:1, 1:1, 2:2}
def fibber(num):
if num not in fibdict:
n = fibber(num - 1) + fibber(num - 2)
fibdict[num] = n
return fibdict[num]
a = [fib(i) for i in range(30)]
b = [fibber(i) for i in range(25000)]
cProfileはかなり明確に実行されているか遅いFIB私に語った、と私に電話/通話の数だけでなく、どのあたりの時間に素敵なデータを提供します多くの合計時間がこの方法に費やされた。明らかにこれは簡単な/おもちゃのコードですが、私は定期的にcProfileを使用して、自分のコードが最も多くの時間を費やしている場所を感じています。私はそれがあなたに必要なデータを与えると思います。
私はこれを試してみましょう。ありがとう。 cProfileのオーバーヘッドは何ですか? –
[cProfileは長時間実行されるプログラムのプロファイリングに適したオーバーヘッドのあるAC拡張です。](http://docs.python.org/library/profile.html#module-profile)私はかなり頻繁に使用しています。オーバーヘッドなどの理由で、「途中で乗っている」ような気がしたことはありません。それが提供するデータは、私がそれが無関係に価値があると思うだけのものです。 –