专栏首页进击的CoderHeartrate:如追综心跳般实时动态可视化监测 Python 程序运行

Heartrate:如追综心跳般实时动态可视化监测 Python 程序运行

项目地址:https://github.com/alexmojaki/heartrate

Heartate——如监测心率般追踪程序运行

Heartrate 是一个 Python 的工具库,可以实时可视化 Python 程序的执行过程。监控运行中的 Python 程序如图:

如图所示,左侧数字表示每行代码被触发的次数。长方框表示最近被触发的代码行——方框越长表示触发次数越多,颜色越浅表示最近被触发次数越多。

虽然追踪每行代码的触发次数是一个方法,但是要是能计算每次触发代码的执行时间就好了。这样能够更好地说明哪行代码是效率瓶颈。by 思

得益于 executing (https://github.com/alexmojaki/executing) 库,当前被执行的调用以高亮显示。

实时堆栈追踪(stacktrace)如下所示:

功能

该工具可以:

  • 启动程序追踪
  • 在线程中启动服务器
  • 打开显示 trace() 被调用的文件可视化图的浏览器窗口

在文件视图中,堆栈追踪位于底部。而在堆栈追踪中,用户可以点击正在追踪文件的堆栈条目,从而在该代码行打开文件的可视化图。

trace 只追踪调用它的线程。若要追踪多线程,用户必须在每个线程都予以调用,并且每次的端口也不同。

如何设置需要监测的程序

files 确定了除调用的 trace 之外其他需要追踪的文件。files 必须是可调用的,并接受一个参数:文件路径,同时如果应该追踪该文件,则需要返回 True。为方便起见,这位开发者提供了以下函数:

  • files.all:追踪所有文件;
  • files.path_contains(substrings):追踪路径中包含任何给定子字符串的所有文件;
  • files.contains_regex(pattern):追踪自身包含给定正则表达式(regex)的所有文件,所以用户可以在源代码中标记所追踪的文件,如添加注释。

默认情况下追踪包含注释 # heartrate 的文件(空格可选)。

如果用户要追踪多个文件,则可通过以下两种方式得到它们的可视化页面:

  • 在堆栈追踪中,用户点击正在追踪的堆栈条目,则可以打开页面并跳转至堆栈条目;
  • 跳转至 http://localhost:9999/ 网站的索引页,从而查看追踪文件列表。

host:服务器的 HTTP host。若要运行可从任何地方访问的远程服务器,使用'0.0.0.0'。默认为'127.0.0.1'。

port:服务器的 HTTP 端口。默认为 9999。

browser:若为 True,则自动打开显示文件(trace 被调用)可视化图的浏览器标签。默认为 False。

安装

pip install --user heartrate

支持 Python 3.5 以上版本。

其他代码可视化工具

机器之心还发现了一个可以可视化代码执行过程的网站,名为 Pythontutor。和本文的 Heartrate 不同,该网站更多的是可视化数据在程序中的变化过程。

可视化的过程如下:

用户还可以在网站上编辑修改代码,观察运行过程中数据的变化。同时该网站还有 Java 等其他语言的版本。

网站地址:http://www.pythontutor.com (http://www.pythontutor.com/)

参考链接:https://github.com/alexmojaki/heartrate

本文分享自微信公众号 - 进击的Coder(FightingCoder),作者:机器之心

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员喜欢的 5 款最佳最牛代码比较神器,必须安利!

    俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧任劳任怨的埋头苦干,梦想着用自己码下的代码改变世界。工欲善其...

    崔庆才
  • 5 款最佳最牛代码比较神器

    原文链接:blog.csdn.net/yueliang2100/article/details/82190257

    崔庆才
  • 十大经典排序算法动画与解析,看我就够了!

    而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

    崔庆才
  • 5分钟面试指南(第二篇 python8荣八耻)

    本部分我们会为大家提供一些python初级工程师在面试过程中遇到的常见的面试题目,期望达到的效果:

    还是牛6504957
  • tailf、tail -f、tail -F三者区别

    数据采集,浪尖公司一直是自己公司写的agent和插件,今天新增业务要快速上线,就想试试flume。结果是用flume,采用tail -f 监控文件的方式,然后发...

    Spark学习技巧
  • 实现LRU算法

    计算机的缓存容量有限,如果缓存满了就要删除一些内容给新的内容腾出位置,而删除哪些内容,就有不同的策略,LRU算法是其中一种策略。

    Defu Li
  • 算法09 五大查找之:哈希查找

    前面的几篇文章分别总结了:顺序查找、二分查找、索引查找、二叉排序树。这一篇文章要总结的是五大查找的最后一个:哈希查找(也称为散列查找)。提起哈希,我的第一印象就...

    nnngu
  • 数据结构基础温故-5.图(下):最短路径

    图的最重要的应用之一就是在交通运输和通信网络中寻找最短路径。例如在交通网络中经常会遇到这样的问题:两地之间是否有公路可通;在有多条公路可通的情况下,哪一条路径是...

    Edison Zhou
  • 1220 数字三角形

    1220 数字三角形  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Descripti...

    attack
  • 如何优雅的判断一个对象的属性是否全部为空

    马上能想到的一个方案是,一个一个判断对象中的属性。这个倒也可以,但是如果要判断的对象比较多,就得给每个对象写一个判断方法(因为每个对象的属性都不一样)。

    用户7634691

扫码关注云+社区

领取腾讯云代金券