VizTracer 0.3.0 功能越来越完备了

从0.2.0到0.3.0花了五天左右的时间,在这一小段的开发过程中,VizTracer又多了很多功能。

最重要的大方向上的增强,是以一种不那么优雅的方式支持了multi processing。

VizTracer本身trace时候的buffer是在process里的,对于多个process的沟通有天生的劣势。所以我选用的方法是每个process单独记录,最后再合并一下。这个方法虽然不算十分优雅,但是总体来说还可以接受。

对于通过fork()实现的多进程,VizTracer的结构可以直接支持,只需要多给一个--pid_suffix让他们的输出别写重了就行。但是如果是subprocess出来的多线程,就得自己想办法了~

无论哪种多线程,最终都会分别生成每个进程的json report,然后用python -m viztracer --combine *.json生成一个最终的report。

除了多进程的支持之外,还顺手支持了flamegraph。之前正好也用到了d3-flamegraph,就加了个选项,让VizTracer也能顺道生成有些人更熟悉的flamegraph,毕竟数据都在那儿。

还有一个很重要的优化,在上一篇文章已经提到了。

增加了一些tracing时候的feature

  • 现在VizTracer本身的library不会被记录
  • 可以通过--log_printprint()的内容直接输出到report里
  • 加了一个decoratorignore_function让用户可以跳过某些函数

另外还修复了一些比较偏的bug

  • 在Mac+Python3.8上有个会导致seg fault的bug,折腾了一整天修好了,我一度以为是python的bug。其实最后也不确定是不是python的bug,那个地方document的不好,我绕开了
  • 修复了没把PyTrace_C_EXCEPTION当return的bug,如果底层的library从C raise exception,是没法catch到PyTrace_C_RETURN的,会导致结果错误。
  • 修复了Timestamp错了一千倍的问题……

最后,为了向production level迈进,还做了一些polish

  • 把command line的help补上了,可以直接通过help看每个选项干吗用的
  • 把README又变得好看了一点点
  • 做了几乎所有argument的input check,以防用户输入不合法的argument
  • 清理了一下代码,更新了一下每个文件的copyright header

这一阵的开发开始逐渐向正式版本的release倾斜,新feature的加入相对少了一些(主要也不太知道该做点什么,缺少用户反馈),更多的是打磨项目本身,让项目看起来更像一个合格可用的工具。

依然欢迎大家试用和提出宝贵意见!顺手给个star也是很好滴!

https://github.com/gaogaotiantian/viztracergithub.com

发布于 08-21

文章被以下专栏收录