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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值