ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

行分析器

面向Sublime Text的基于行的Python性能分析插件

详细信息

  • 2021.01.11.16.17.27
  • github.com
  • github.com
  • 4年前
  • 刚刚
  • 11年前

安装次数

  • 总计 905
  • Win 462
  • Mac 252
  • Linux 191
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

说明文档

源代码
raw.githubusercontent.com

LineProfiler

此插件在Sublime Text中提供了一个简单界面来访问line_profiler和kernprof

安装

LineProfiler可通过包控制使用,这是安装它的最简单方法。或者,你也可以下载此仓库并将其放置在您的 Packages目录中。

配置

  1. 安装line_profilerkernprof.py
    • 最简单的安装方法是pip install --pre line_profiler
    • 也可以通过从line_profiler网站下载来安装。
  2. 可选:更新LineProfiler的设置
    • 在(首选 > 包设置 > LineProfiler > “设置 - 用户”)中可访问

可用的首选项是

  • kernprof:(可选)您下载的与line_profiler模块一起的kerprof.py文件的路径。
  • pythonpath:(可选)要追加到默认PYTHONPATH开头的冒号分隔路径列表。
  • poll_timeout_seconds:(可选)在杀死分析器之前等待的秒数。如果您正在分析运行超过一分钟的代码,请增加此值。
  • poll_sleep_seconds:(可选)在轮询分析器以获取结果之前睡眠的秒数。如果您发现获取分析器结果的时间延迟太长,请减少此值。

使用

@profile注释添加到您要分析的任何函数中。然后,通过可用的绑定运行插件:* ctrl-alt-shift-p * 右键单击 > “运行line_profiler” * 工具 > 包 > “运行line_profiler”

如果成功,将会出现一个临时缓冲区,显示您的结果。如果不成功,请检查控制台(ctrl-`)查看任何错误消息。

分析器在后台进程中运行,因此Sublime会继续正常运行,直到返回结果为止。

示例

这是一个尝试使用LineProfiler并熟悉插件的简单方法。

步骤 1:打开Sublime并创建一个简单的Python文件

def foo():
  for i in xrange(1000):
    bar = i**2
    baz = i*i

if __name__ == '__main__':
  foo()

当然,它可能没有什么实际作用,但它会运行。请确保告诉Sublime这是Python代码,无论是通过将其保存为.py文件,还是在下方的工具栏中选择Python。

步骤 2:将@profile装饰器添加到foo函数中,如下所示

@profile
def foo():

(其他内容保持不变。)

步骤 3:从命令面板、右键菜单或键盘快捷键运行LineProfiler。该命令仅在Python模式下可用,因此请首先检查这一点。

步骤 4:等待大约一秒钟,然后观察新的标签页中出现的性能分析结果。如果一切顺利,你应该会看到foo函数的每个代码行都被标注了它们的执行次数、总时间和每次运行的时间。

function foo in file tmpev_rzr.py took 0.001248 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     2                                           @profile
     3                                           def foo():
     4      1001          372      0.4     29.8    for i in xrange(1000):
     5      1000          458      0.5     36.7      bar = i**2
     6      1000          418      0.4     33.5      baz = i*i

某些行可能会被突出显示。这些是在您的代码中占用不成比例时间的“热点”。

如果您在 seconds 后没有看到任何内容,请检查控制台(ctrl-`)以查看错误原因。通常,问题只是一个简单的问题,即设置好用户设置文件中的正确路径。