Python探查器Statprof给出了同一过程的多次出现

2024-09-30 19:33:34 发布

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

我尝试使用Python profilerstatprof来分析我的一些代码。文档中说,如果一个过程被多次遇到,它只会被计数一次。但是,在概要文件的输出中,我看到同一过程的多个实例,具有不同的行号。有人知道这会显示什么吗?在

eg输出

  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

Tags: 文件实例代码文档pybox过程do
1条回答
网友
1楼 · 发布于 2024-09-30 19:33:34

我刚刚看了一下doc,上面说的是,如果一个过程在一个堆栈样本中多次遇到,则只计算一次。 (这里我假设术语“过程”应该是“过程中的代码行”。)

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

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

第一列是“%time”,不计算子项,即self percent。这是一个无用的统计数据,因为几乎没有任何东西不是过程调用,查看这行代码就可以判断它是否是过程调用。在

第二列是“累计时间”,包括孩子。这很好,但应该是百分数,这样你就不必除以总时间就知道它是多少了。 数字之所以重要,是因为它代表了这条线所负责的——如果没有这条线,可以节省的总时间的一小部分。在

第三列是“自我时间”,正如我所解释的,这是一个无用的统计数据。 它的极小或零反映了它的无用性。 因为它包含在累计时间中,如果它不是非常小,那么累积时间也会显示它,所以它不会告诉你累计时间没有

另外,正如作者指出的,在I/O过程中,样本是挂起的, 所以如果它在做一些你不想要或不需要的I/O,在某个库中, 如果这会让程序花费100倍的时间, 探查器(和您)将完全不知道这一点。在

相关问题 更多 >