python绘制函数调用图总结

python绘制函数调用图总结:pycallgraph系列

介绍

pycallgraph系列库可用于可视化函数调用关系,学习意外发现也会显示函数调用的次数和时间,输出的格式测试过png,pdf和svg三种,貌似只有png可以正常查看,所以还是推荐png格式的输出。其他参数方面主要有可以设置调用的深度、忽略特定的函数。在一个大型的项目中可以忽略特定的函数真的很方便,特别是那些耗时很少的函数。

安装

下载graphviz,安装时可以选择添加环境变量,重启后生效。
查询发现pycallgraph库有多个版本,但都不再维护了。其中通过pip安装最方便的是pycallgraph2,支持python2.x和python3.x,而pycallgraph3仅支持python3.x,更新截止到2022年。另外有一个更新的类似分支的库python-call-graph,用法与pycallgraph系列基本相同。

#可正常安装,pycallgraph和pycallgraph3都无法直接安装
pip install pycallgraph2 -i https://pypi.tuna.tsinghua.edu.cn/simple

示例

虽然可以通过命令行运行,但是个人觉得不太实用,下面展示官方代码示例和一些笔记。

from pycallgraph2 import PyCallGraph
from pycallgraph2.output import GraphvizOutput
from pycallgraph2 import Config
from pycallgraph2 import GlobbingFilter

class Banana:

    def __init__(self):
        pass

    def eat(self):
        self.secret_function()
        self.chew()
        self.swallow()

    def secret_function(self):
        time.sleep(0.2)

    def chew(self):
        pass

    def swallow(self):
        pass

# 测试发现不分组更有层次感,不会有错乱的线条交织着
config = Config(
    groups=True, # 设置是否分组
    max_depth=3, # 设置可视化函数调用的最大深度
)
# exclude参数指定排除的函数,可以使用通配符
# include参数指定要包含的函数,可以使用通配符
config.trace_filter = GlobbingFilter(
    exclude=[
        'pycallgraph.*',
        '*.secret_function',
    ],
    include=[
        'main',
    ]
)
# 设置GraphvizOutput输出为PNG格式
graphviz = GraphvizOutput(
    output_file='test.png'
)
# 使用PyCallGraph生成调用图,将需要分析的主函数写在下面即可
with PyCallGraph(output=graphviz, config=config):
    banana = Banana()
    banana.eat()

相关推荐

  1. python绘制函数调用总结

    2024-07-22 20:02:01       16 阅读
  2. python绘制等高线

    2024-07-22 20:02:01       29 阅读
  3. python绘制三维

    2024-07-22 20:02:01       28 阅读
  4. python绘制热点

    2024-07-22 20:02:01       28 阅读
  5. 函数调用生成_incomplete

    2024-07-22 20:02:01       44 阅读
  6. python Opencv 中绘制

    2024-07-22 20:02:01       46 阅读
  7. python绘制散点

    2024-07-22 20:02:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 20:02:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 20:02:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 20:02:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 20:02:01       55 阅读

热门阅读

  1. PHP 表单验证:邮件和URL

    2024-07-22 20:02:01       17 阅读
  2. org.apache.ibatis.session是什么?

    2024-07-22 20:02:01       13 阅读
  3. C语言 指针方法 有一个班4个学生,5门课程

    2024-07-22 20:02:01       12 阅读
  4. C++中的explicit关键字

    2024-07-22 20:02:01       13 阅读
  5. 数组常见的实例方法

    2024-07-22 20:02:01       14 阅读
  6. 精通Gradle发布配置:打造自动化部署的高速公路

    2024-07-22 20:02:01       16 阅读
  7. 力扣283.移动零

    2024-07-22 20:02:01       15 阅读
  8. SAP 如何修改统驭科目类型

    2024-07-22 20:02:01       15 阅读
  9. 部署Mojo模型:生产环境中的智能自动化

    2024-07-22 20:02:01       15 阅读
  10. Linux的shell的date命令

    2024-07-22 20:02:01       15 阅读