我的大多数Python程序都花在一个名为_build_userdbs
的方法上。我使用了很棒的工具SnakeViz来帮助解释结果。下面是截图。
现在,在那张照片中,我在_build_userdbs
。在其外面的大绿色圆圈是一种名为_append_record
的方法,正如您所看到的,它几乎占据了_build_userdbs
的所有内容。我理解这一点。
但这是令人困惑的部分。内部绿色圆圈之外的绿色圆圈(占据绝大多数的时间)是_append_record
减去累积时间的累积时间_append_record
中调用的函数。
数量上,_append_record
的累计时间 55970秒。那是内心的绿色圆圈。它的总时间是54210秒。那是外面的绿色圆圈。
_append_record
,正如您所看到的,如果您在新标签中打开该图像,则会调用其他一些功能。那些是:
json.dumps()
(累积459秒)_userdb_scratch_file_path()
(累积161秒)open
(累积2160秒)print
(小于.1%的框架,因此不显示)好吧,这是有道理的;由于_append_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()
函数?