Ошибка Python-Hotshot при попытке профилировать простую программу

Я пытался узнать, как профилировать простую программу на Python с помощью hotshot, но столкнулся со странной ошибкой,

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?

Спасибо!


person viksit    schedule 30.06.2009    source источник


Ответы (2)


И я думаю, что понял то, что пропустил более 2 часов..

Оказывается, runcall() следует вызывать так:

runcall(main, self.argv)

и это заставляет вещи работать!

person viksit    schedule 30.06.2009

В общем, если у вас есть способ произвольно приостановить или прервать программу и просмотреть стек вызовов, этот метод работает всегда.

person Mike Dunlavey    schedule 01.07.2009
comment
Хороший! Мне нравится байесовская теория отладки :) - person viksit; 05.07.2009