我的大部分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
(少于帧的0.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()
函数?在
目前没有回答
相关问题 更多 >
编程相关推荐