Python探查器Statprof提供了多次相同的过程

时间:2012-08-06 12:13:05

标签: python performance profiling

我尝试使用Python分析器statprof来分析我的一些代码。文档说如果多次遇到一个过程,它只计算一次。但是在配置文件的输出中,我看到具有不同行号的相同过程的多次出现。任何人都知道这可能会显示什么?

例如输出

  0.00      0.01      0.00  box.py:1305:**do_forever**

  0.00      0.01      0.00  httplib.py:981:_send_request

  0.00      0.01      0.00  box.py:1295:**do_forever**

  0.00      0.01      0.00  box.py:1295:**do_forever**

  0.00      0.01      0.00  sre_compile.py:486:_code

  0.00      0.01      0.00  box.py:923:get_user_file_info

  0.00      0.00      0.00  box.py:776:update_all_internal_user_stats_batch

1 个答案:

答案 0 :(得分:1)

我只是查看了文档以及它说的是如果在单个堆栈示例中多次遇到的过程,它只计算一次。 (我在这里假设术语“程序”应该是“程序中的代码行”。)

这意味着 - 如果有递归,你不希望函数的时间成本被递归的深度人为地放大。

另外,我会指出其他一些事情(explained in more detail here):

第一列是“%time”,不包括儿童,即自我百分比。这是一个无用的统计数据,因为几乎没有什么不是过程调用,并查看该行,您可以判断它是否是过程调用。

第二栏是“累积时间”,包括儿童。这很好,但它应该是百分比,这样你就不必除以总时间来看它是多少。 这个数字很重要的原因是它代表了这条线的责任 - 如果那条线不在那里,可以节省的总时间的一小部分。

第三栏是“自我时间”,正如我所解释的那样,这是一个无用的统计数据。 它非常小或零的事实反映了它的无用性。 由于它包含在累积时间内,如果它不是非常小,累积时间也会显示它,因此它不会告诉你累积时间没有。

此外,正如作者所指出的,样本在I / O期间暂停, 所以,如果它正在做一些你不想要或不需要的I / O,那么在某些库中, 如果这使得程序花费的时间是原来的100倍, 探查者(和你)将完全没有意识到它。