如何防止pycallgraph进入标准库函数?

2024-05-28 15:59:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在命令行中使用pycallgraph来分析和绘制一个相对简单的程序的调用图。然而,结果图像包含了标准库(线程、json、socket)的内部,即使我没有使用-s命令行选项。使用-e选项排除这些模块没有效果,使用-i会导致调用图为空。我也尝试过cProfile,但它只显示了主线程。在

如何使pycallgraph只在代码中显示调用?目前混乱的结果毫无用处。在

编辑:我使用的是0.5.1,可以通过easy_安装获得。正在运行pycallgraph/光标客户端.py输出这个:a messy call graph。如您所见,pycallgraph显示了模块json、re、encodings、socket和threading的内部结构。Re和encodings从来没有在我的代码中直接调用,而是分别通过json和socket调用。在


Tags: 模块代码命令行图像程序json标准选项
2条回答

Pycallgraph提供了过滤功能,可以过滤出要从调用图中排除的任何模块、类或函数。在启动跟踪并传递给pycallgraph之前,应该定义以下函数

示例

def filtercalls(call_stack, modul, clas, func, full):
    mod_ignore = ['shutil','scipy.optimize','re','os','sys','json']
    func_ignore = ['CustomFunctionName','pdbcall']
    clas_ignore = ['pdb']
    return modul not in mod_ignore and func not in func_ignore and clas not in clas_ignore

pycallgraph跟踪开始是

^{2}$

这样,您在filtercalls中提供的任何模块、类或函数都将被删除。请注意,在标准库中只提供模块名是不够的。因此,在mod中仍将忽略numpy.core公司被包括在内

pycallgraph有一个未记录的stop_trace()方法,可用于排除代码部分。有点像

import pycallgraph
import mycode
import stuff_i_dont_want_to_see

pycallgraph.start_trace()
#Initializations

pycallgraph.stop_trace()
stuff_i_dont_want_to_see()
pycallgraph.start_trace()

mycode.things()
pycallgraph.make_dot_graph('cleaner_graph.png')

这就是你想要的吗?在

source

相关问题 更多 >

    热门问题