VizTracer 0.9.0, 支持多进程了

VizTracer迈入了0.9.0。其实距离0.8.0的commit数不算多,之所以提升了minor版本,是因为达成了一个小的里程碑——多进程的支持。

之前的VizTracer多进程支持的比较晦涩,需要用户自己把每个进程都手动改用viztracer打开,保存json report然后给combine到一起。当然如果用的是以os.fork()为基础的多进程,只需要pass一个--pid_suffix就行,然后再combine。

这次的多进程支持主要是针对的python自带的subprocess这个库,在稍微处理了一下这个库之后,VizTracer现在可以在pass --log_subprocess的情况下,直接log这个程序建立的所有子进程,并且自动合并到一个report里。是不是变得简单了很多!当然有一些条件,就是在脚本调用subprocess的时候,传进去的args必须是一个list,而且第一个argument要是python ,否则VizTracer就不会自动记录。

这是0.9.0最大的突破,终于开始比较舒适地支持多进程了。当然这个feature有可能出问题的地方挺多的,所以大家如果试用阶段发现了一些bug,欢迎来提issue,我会尽量把它打磨好。

除此之外,0.8.*主要是增加了一些log feature,都是在完全不修改源代码的情况下的log。

  • log_attr可以自动记录任何match某些RegEx的attribute的赋值
    • 比如viztracer --log_attr value script.py就会记录所有*.value变量被赋值的情况
  • log_func_exec可以详细地记录match某些RegEx的函数的运行情况
    • 被详细记录的函数内,每一次赋值都会产生一个log,让你明确看到哪行发生了什么样的赋值
  • log_exception可以记录每个raise的exception,无论是否被catch了

再强调一下,这些所有的log,都是在完全不修改源代码的情况下完成的。 即插即用,方便可靠。

当然这个过程中也产生了一些小改动,我们也稍微总结一下

  • --现在可以用来分隔给VizTracer的argument和你自己script的argument了,这是个POSIX常用的方法,原来的--run依然可以用,但是是undocumented feature了
  • 修复了一个原来parse argument的时候argument冲突会导致错误的bug
  • 把一些几乎不可能触发的程序标记了一下,现在coverage又回到99.5%+了

最后还要说一下,VizTracer迎来了第一个PR!liuyangc3同学给了一个让file search支持Windows的PR,已经merge进来啦!还是要庆祝一下第一次社区贡献,未来也欢迎大家提issue和PR。

gaogaotiantian/viztracergithub.com图标

发布于 10-28

文章被以下专栏收录