Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解释cProfile结果:小函数中的总时间与累积时间_Python_Optimization_Profiling_Cprofile - Fatal编程技术网

Python 解释cProfile结果:小函数中的总时间与累积时间

Python 解释cProfile结果:小函数中的总时间与累积时间,python,optimization,profiling,cprofile,Python,Optimization,Profiling,Cprofile,我的大部分Python程序都花在一个名为\u build\u userdbs的方法中。我正在使用一个很棒的工具来帮助解释结果。下面有一个截图 现在,在这张图片中,我在\u build\u userdbs。在这个大绿圈的右边是一个叫做\u append\u record的方法,正如您所看到的,它几乎占用了所有\u build\u userdbs。我明白这一点 但这是令人困惑的部分。内部绿色圆圈外的绿色圆圈(占绝大多数时间)是\u append\u记录的累积时间减去\u append\u记录中调用

我的大部分Python程序都花在一个名为
\u build\u userdbs
的方法中。我正在使用一个很棒的工具来帮助解释结果。下面有一个截图

现在,在这张图片中,我在
\u build\u userdbs
。在这个大绿圈的右边是一个叫做
\u append\u record
的方法,正如您所看到的,它几乎占用了所有
\u build\u userdbs
。我明白这一点

但这是令人困惑的部分。内部绿色圆圈外的绿色圆圈(占绝大多数时间)是
\u append\u记录
的累积时间减去
\u append\u记录
中调用的函数的累积时间

从数量上讲,
\u append\u记录的累计时间是55970秒。那是内部的绿色圆圈。它的总时间是54210秒。那是外面的绿色圆圈

\u append\u record
,您可以看到,如果在新选项卡中打开该图像,将调用其他两个函数。这些是:

  • json.dumps()
    (累计459秒)
  • \u userdb\u scratch\u file\u path()
    (累计161秒)
  • 打开
    (累计2160秒)
  • 打印
    (小于未显示的帧的.1%)
好吧,这很有道理;由于
\u append\u record
的累积时间和总时间之间的差异相对较小,它必须在自己的堆栈框架中进行大量处理,而不是将其委托给其他函数。但这里是函数的主体:

def _append_record(self, user, record):
    record = json.dumps(record)
    dest_path = self._userdb_scratch_file_path(user)
    with open(dest_path, 'at') as dest:
        print(record, file=dest)
那么,所有这些处理过程都在哪里进行呢?这个函数调用开销是造成差异的原因吗?分析开销?这些结果只是不准确吗?为什么不调用
close()
函数