过滤掉不相关的 cProfile 输出

Posted

技术标签:

【中文标题】过滤掉不相关的 cProfile 输出【英文标题】:Filtering out irrelevant cProfile output 【发布时间】:2019-11-28 14:15:01 【问题描述】:

我正在使用cProfile 分析一个Python 应用程序,我发现它的输出非常冗长。我正在使用此代码来创建配置文件并将其可视化:

PYTHONPATH=. \
    python3 \
    -m cProfile \
        -s cumtime \
        -o output.cprof \
    foo/__main__.py && \
gprof2dot \
    -f pstats \
    output.cprof | \
dot -Tpdf -o output.pdf

例如,这是我使用gprof2dot 创建的图表的一部分:

显然,这些是我不感兴趣的方法。但是,我知道我要检查的函数的名称,我们称之为foo:xxx:my_function。如何过滤 cProfile 输出,以便我只能查看此函数及其被调用者?

我见过this question,但它只谈论查看输出的head

【问题讨论】:

【参考方案1】:

幸运的是,gprof2dot 有一个过滤函数名称的选项。

所以,我可以使用 -z 和节点上的函数名称来仅查看后代:

python3 \
    -m cProfile \
        -s cumtime \
        -o output.cprof \
    foo/__main__.py && \
gprof2dot \
    -f pstats \
    -z "foo:xxx:my_function" \
    output.cprof | \
dot -Tpdf -o output.pdf

【讨论】:

以上是关于过滤掉不相关的 cProfile 输出的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:如何将 cProfile 输出存储在 pandas DataFrame 中?

Python cProfile:如何从分析数据中过滤掉特定的调用?

Spyder 分析器使用 cProfile 还是 Profile?

正确使用 cProfile 的方法

如何计算几个 cProfile 结果的平均结果?

在python中将函数传递给cProfile的正确方法是啥?