首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python inspect.stack很慢

Python inspect.stack很慢
EN

Stack Overflow用户
提问于 2013-07-01 22:38:52
回答 2查看 3.9K关注 0票数 9

我只是在分析我的Python程序,看看为什么它看起来相当慢。我发现它的大部分运行时间都花在了inspect.stack()方法上(用于输出带有模块和行号的调试消息),每次调用0.005秒。这似乎相当高;inspect.stack真的这么慢吗,还是我的程序出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 22:45:41

inspect.stack()做两件事:

  • 通过从调用者(sys._getframe(1))向解释器请求堆栈帧,然后遵循所有.f_back引用来收集堆栈。
  • 每帧收集文件名、行号和源文件上下文(如果需要,源文件行加上周围的一些额外行)。后者需要读取每个堆栈帧的源文件。这是代价高昂的一步。

要关闭文件上下文加载,请将context参数设置为0

代码语言:javascript
复制
inspect.stack(0)

即使在context设置为0的情况下,您仍然会在每个帧中产生一些文件系统访问,因为确定并验证了每个帧的文件名是否存在。

票数 19
EN

Stack Overflow用户

发布于 2017-03-07 05:50:25

inspect.stack(0)可以比inspect.stack()更快。尽管如此,最快的方法是避免完全调用它,也许可以使用下面这样的模式:

代码语言:javascript
复制
frame = inspect.currentframe()
while frame:
    if has_what_i_want(frame):  # customize
        return what_i_want(frame)  # customize
    frame = frame.f_back

请注意,最后一个frame.f_backNone,然后循环将结束。

显然不应该使用sys._getframe(1),因为它是一个内部方法。

作为另一种选择,可以遍历inspect.getouterframes(inspect.currentframe()),但这种方法预计会比上面的方法慢。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17407119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档