2

hotshot を使用して単純な python プログラムをプロファイリングする方法を学ぼうとしていましたが、奇妙なエラーに直面しています。

import sys
import hotshot
def main(argv):
  for i in range(1,1000):
    print i

if __name__ == "__main__":
  prof = hotshot.Profile("hotshot_edi_stats")
  b,c = prof.runcall(main(sys.argv))
  prof.close()

そして出力、

.
.

995
996
997
998
999
Traceback (most recent call last):
  File "t.py", line 9, in <module>
    b, c = prof.runcall(main(sys.argv))
  File "/usr/lib/python2.5/hotshot/__init__.py", line 76, in runcall
    return self._prof.runcall(func, args, kw)
TypeError: 'NoneType' object is not callable

なぜこれが起こるのか誰にも分かりますか?hotshot プロファイラー自体の問題のように思えます。あるいは、Python プログラムをプロファイリングするための他の方法について提案がありますか?

ありがとう!

4

2 に答える 2

3

そして、2時間以上見逃していたものを見つけたと思います..

結局のところ、runcall() は次のように呼び出す必要があります。

runcall(main, self.argv)

これでうまくいきます!

于 2009-06-30T01:46:54.850 に答える
1

一般に、プログラムをランダムに一時停止または中断してコール スタックを確認する方法がある場合、この方法は常に機能します。

于 2009-07-01T19:46:59.983 に答える