打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pycallgraph-一个可视化Python应用程序流程(调用图)的工具

欢迎!pycallgraph是一个Python模块,可为Python应用程序创建调用图可视化。

  特征

  • 支持Python 2.7+和Python 3.3+。

  • 使用各种工具(例如Graphviz和Gephi)对调用图进行静态可视化。

  • 从命令行执行pycallgraph或将其导入代码中。

  • 可自定义的颜色。您可以根据调用次数,所需时间,内存使用情况等以编程方式设置颜色。

  • 可以在视觉上将模块分组在一起。

  • 易于扩展以创建自己的输出格式。

快速开始

需要使用pycallgraph,您可以通过pip安装或者网盘下载pycallgraph的源代码

pip install pycallgraph

您可以使用命令行界面快速查看Python脚本,也可以使用pycallgraph模块获取更细粒度的设置。

以下示例将graphviz指定为输出程序,因此需要安装它。他们将生成一个名为pycallgraph.png的文件。

运行pycallgraph的命令行方法是:

$ pycallgraph graphviz -- ./mypythonscript.py

该API的简单用法是:

from pycallgraph import PyCallGraphfrom pycallgraph.output import GraphvizOutputwith PyCallGraph(output=GraphvizOutput()):    code_to_profile()

示例

示例一

#!/usr/bin/env python'''This example demonstrates a simple use of pycallgraph.'''from pycallgraph import PyCallGraphfrom pycallgraph.output import GraphvizOutputclass Banana:    def eat(self):        passclass 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 xrange(10):            person.add_banana(Banana())        person.eat_bananas()if __name__ == '__main__':    main()

下面是从上面的代码生成的图像:

  示例二

#!/usr/bin/env python'''Runs a regular expression over the first few hundred words in a dictionary tofind if any words start and end with the same letter, and having two of thesame letters in a row.'''import argparseimport refrom pycallgraph import PyCallGraphfrom pycallgraph import Configfrom pycallgraph.output import GraphvizOutputclass RegExp(object):    def main(self):        parser = argparse.ArgumentParser()        parser.add_argument('--grouped', action='store_true')        conf = parser.parse_args()        if conf.grouped:            self.run('regexp_grouped.png', Config(groups=True))        else:            self.run('regexp_ungrouped.png', Config(groups=False))    def run(self, output, config):        graphviz = GraphvizOutput()        graphviz.output_file = output        self.expression = r'^([^s]).*(.)\2.*\1$'        with PyCallGraph(config=config, output=graphviz):            self.precompiled()            self.onthefly()    def words(self):        a = 200        for word in open('/usr/share/dict/words'):            yield word.strip()            a -= 1            if not a:                return    def precompiled(self):        reo = re.compile(self.expression)        for word in self.words():            reo.match(word)    def onthefly(self):        for word in self.words():            re.match(self.expression, word)if __name__ == '__main__':    RegExp().main()

下面是从上面的代码生成的图像:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
自动生成python程序调用关系逻辑图
python爬虫|pyspider的第一个爬虫程序,大功告成!
自己用python写一个倒计时软件 - Huiwei的日志 - 网易博客
用 RNN 训练语言模型生成文本
TF之RNN:实现利用scope.reuse_variables()告诉TF想重复利用RNN的参数的案例
AutoLine源码之RobotFramework运行器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服