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()
下面是从上面的代码生成的图像:
赞 (0)