我只是在分析我的Python程序,看看为什么它看起来相当慢。我发现它的大部分运行时间都花在了inspect.stack()方法上(用于输出带有模块和行号的调试消息),每次调用0.005秒。这似乎相当高;inspect.stack真的这么慢吗,还是我的程序出了什么问题?
发布于 2013-07-01 22:45:41
inspect.stack()做两件事:
sys._getframe(1))向解释器请求堆栈帧,然后遵循所有.f_back引用来收集堆栈。要关闭文件上下文加载,请将context参数设置为0
inspect.stack(0)即使在context设置为0的情况下,您仍然会在每个帧中产生一些文件系统访问,因为确定并验证了每个帧的文件名是否存在。
发布于 2017-03-07 05:50:25
inspect.stack(0)可以比inspect.stack()更快。尽管如此,最快的方法是避免完全调用它,也许可以使用下面这样的模式:
frame = inspect.currentframe()
while frame:
if has_what_i_want(frame): # customize
return what_i_want(frame) # customize
frame = frame.f_back请注意,最后一个frame.f_back为None,然后循环将结束。
显然不应该使用sys._getframe(1),因为它是一个内部方法。
作为另一种选择,可以遍历inspect.getouterframes(inspect.currentframe()),但这种方法预计会比上面的方法慢。
https://stackoverflow.com/questions/17407119
复制相似问题