首先声明这个不是我写的,而是替刚注册 V2 还不能发帖的朋友发的。当然我觉得 VizTracer 确实不错,比其它的火焰图库更符合直觉。 他的账号:@gaogaotiantian
下面是正文。
小伙伴们大家好~今天来分享一下我这几个月做的开源项目 VizTracer 。先把地址给了。
https://github.com/gaogaotiantian/viztracer
VizTracer 的核心功能是帮助你理解你的代码到底在干什么。它会 trace 你的 python code,记录每一次函数运行和返回的时间点,最后生成一个 html 文件把整个运行结果可视化,大概长这个样子:
可能有些同学用过一些代码运行可视化的库,比如 gprof2dot 或者 snakeviz 之类,也可能大家觉得这个图和 flamegraph 也就是火焰图很像,但是 VizTracer 带来的信息和一切 profiler 是不太一样的。
如果仔细观察的话能看出来,VizTracer 的横轴是时间,它记录了所有事件(函数)发生的顺序,谁调用的谁,每一次运行的时间,而不是单纯地某个函数一共占了多少时间,或者是总结性的函数关系图。VizTracer 展示的数据是一切以 cProfile 为基础的库都没法展示的,因为 cProfile 压根就没记录这些数据。相比起这些"profiler",VizTracer 更像一个 logging tool 。
先简单说一下 VizTracer 怎么用吧。在设计之初,我的理念就是要让工具尽可能地好上手,所以 VizTracer 的使用其实特别容易:
pip install viztracer
viztracer your_script.py
是不是超级简单。基本上你只需要把原来的
python your_script.py arg1 arg2
变成
viztracer your_script.py arg1 arg2
就行了。
在运行之后,VizTracer 会在当前目录下生成一个result.html
文件,用 chrome 打开它即可。我自己生成了一些demo,感兴趣的同学可以看一下。
除了最基础的记录函数 entry/exit 的功能之外,VizTracer 还有很多其他 loggin 功能,比较有趣的事,这里面有大量的功能是可以不改源代码就完成的。
举个例子,你可以让 VizTracer 记录每个函数的 arguments 和 return value,只需要
viztracer --log_return_value --log_function_args your_script.py
或者你可以让 VizTracer 记录任何符合某些 RegEx 的变量
viztracer --log_var <regex1> <regex2> --run your_script.py
这个的效果是,如果有一个变量的名称符合<regex1>
或者<regex2>
,VizTracer 就会在这个变量每次被 assign 之后记录一个 custom event,让你可以在 report 里看到它被改成什么值了。(这里增加了--run
是为了去歧义,--log_var
可以 take 任意多的值)
另外 VizTracer 还提供了一些 filter 功能,让你可以不记录你不感兴趣的内容。比如你可以只记录某些文件里的函数
viztracer --include_files ./src --run your_script.py
其实还有很多很多 feature,欢迎大家去试用一下,这里只介绍了开箱即用的不改代码的一少部分 feature,还有一些 custom event 可以修改源代码来更精确地记录数据的变化。
最后其实我想提一句的是,VizTracer 是我很认真对待的一个项目,不是当作玩具做的,我写了比较详细的文档(所有的 feature 都介绍了),test coverage 做到了 99.5%+,支持 Linux/MacOS/Windows 。另外为了追求 performance,VizTracer 的核心代码是纯 C 写的(所以只支持 CPython ),产生的 Overhead 和 cProfile 是差不多的,在 worst case 大概是 2x-3x 这个数量级(当然前提是没有 log 太多 custom 的东西)。
就先介绍到这里吧!欢迎大家试用以及提出宝贵意见哈!有任何问题可以下面留言,也可以直接去 github 给我提 issue~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.