神器,轻松可视化 Python 程序调用流程

开发 后端
今天我们来分享一个 Python 领域的神级第三方库 -- pycallgraph,通过该库并结合 graphviz 工具,就可以非常方便的完成 Python 应用程序调用流程的可视化工作。

我们先来看下效果图:

怎么样,很是惊艳吧~

下面我们就来一起完成这个可视化过程。

1. 安装 graphviz 工具

生成图片的过程,是依赖工具 graphviz 的,我们先进行下载安装。

下载地址

  • http://www.graphviz.org/download/

2. 实战

接下来我们还需要安装两个 Python 依赖库。

pip install pycallgraph
  • 1.

下面我们先写一个基础的代码;

from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
class Banana:
   def eat(self):
       pass
class Person:
   def __init__(self):
       self.no_bananas()
   def no_bananas(self):
       self.bananas = []
   def add_banana(self, banana):
       self.bananas.append(banana)
   def eat_bananas(self):
       [banana.eat() for banana in self.bananas]
       self.no_bananas()
def main():
   graphviz = GraphvizOutput()
   graphviz.output_file = 'basic.png'
   with PyCallGraph(output=graphviz):
       person = Person()
       for a in range(10):
           person.add_banana(Banana())
       person.eat_bananas()
if __name__ == '__main__':
   main()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

代码比较简单,定义了两个简单类,主要 pycallgraph 的核心代码在 main 函数中,在 with 代码块下,把我们定义的代码执行一遍即可

运行上面的代码,会在当前目录下生成 basic.png 图片文件

从生成的图片可以非常清晰的看出整个代码的运行过程,从 main 代码块到各个类的初始化,可以说一目了然。

我们再来一个复杂一点的例子:

import re
from pycallgraph import PyCallGraph
from pycallgraph import Config
from pycallgraph.output import GraphvizOutput
def main():
   graphviz = GraphvizOutput()
   graphviz.output_file = 'regexp.png'
   config = Config(include_stdlib=True)
   with PyCallGraph(output=graphviz, config=config):
       reo = compile()
       match(reo)
def compile():
   return re.compile('^[abetors]*$')
def match(reo):
   [reo.match(a) for a in words()]
def words():
   return [
       'abbreviation',
       'abbreviations',
       'abettor',
       'abettors',
       'abilities',
       'ability',
       'abrasion',
       'abrasions',
       'abrasive',
       'abrasives',
   ]
if __name__ == '__main__':
   main()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

代码同样不负责,不过在编译器内部是调用了 re 正则的,我们来看看最终生成的图片:

可以看到整个代码过程复杂了很多,因为内部调用了很多正则内部函数等,但是整体还是非常清晰的

可以说这个神级第三方库,绝对是众多 Python 爱好者,尤其是刚刚入门 Python 领域的朋友的福音,当我们遇到某些不熟悉的较为复杂的代码块时,不妨使用该库来尝试一下可视化,看看能不能从中爆发灵感呢~

责任编辑:庞桂玉 来源: 小詹学Python
相关推荐

2022-02-23 09:50:52

PythonEchartspyecharts

2021-10-08 09:27:11

Python图形化工具

2021-07-02 14:07:00

可视化Plotly漏斗图

2022-08-26 09:15:58

Python可视化plotly

2009-08-03 21:43:03

IT运维可视化摩卡

2021-07-27 11:45:37

Python 开发编程

2025-02-25 11:14:39

2020-03-11 14:39:26

数据可视化地图可视化地理信息

2020-08-04 13:40:02

数据可视化热力图表格

2021-04-24 23:26:12

Python仪表盘存储

2019-03-20 13:44:30

Web 开发代码

2018-03-26 14:20:23

PythonMatplotlib数据可视化

2018-03-24 21:38:54

Python数据库数据可视化

2023-04-14 08:21:55

2021-06-24 13:00:35

微软开源可视化

2020-03-23 14:55:52

Python可视化Plotly

2016-09-09 13:48:54

API可视化华为开发者社区

2017-10-14 13:54:26

数据可视化数据信息可视化

2009-04-21 14:26:41

可视化监控IT管理摩卡

2020-08-10 06:22:02

绘图命令dot
点赞
收藏

51CTO技术栈公众号