对于重新发布的道歉但我必须在工作时编辑这个问题,并意识到我需要有一个帐户才能这样做。所以这里又一次(带有更多的背景)。
我正在尝试计算脚本执行的时间,我想通过检查每行代码执行后经过的时间来做到这一点。我之前在脚本包含方法定义时已经这样做了,但我不确定它在这个实例中是如何工作的。
所以我的问题是:有没有办法在没有方法定义的脚本中使用setTrace()函数?即。
for i in range(1, 100):
print i
def traceit(frame, event, arg):
if event == "line":
lineno = frame.f_lineno
print "line", lineno
return traceit
sys.settrace(traceit)
答案 0 :(得分:2)
不,正如the docs所说,“每当输入新的本地范围时,都会调用跟踪函数(事件设置为'call')” - 如果你从未输入本地范围(并且只执行全局范围),永远不会调用跟踪函数。请注意,settrace无论如何都是为了定时“脚本执行多长时间”,因为它会改变它的测量值太多;如果你说的实际上是你想要的,只需花时间开始执行并注册atexit
一个能够再次获得时间并打印差异的函数。如果您想要的不同,即分析,请参阅cProfile。
进一步注意,你提供的代码示例可能无法做任何有用的事情(即使我已经编辑它来修复缩进错误):首先它循环,然后它定义一个函数,最后它调用settrace ...然后立即结束,因为之后没有更多的代码!如果你希望发生任何事情在那个循环开始之前,并且你想要在模块顶层(不好主意,但是,无论如何)拥有一切,你必须在词汇之前放置“任何东西” 循环,而不是......; - )