了解Pycharm的分析器结果与cProfile的结果以及如何获取有关标准库函数的更多详细信息

时间:2019-01-09 21:26:57

标签: python python-3.x pycharm profiling cprofile

我正在努力缩短重构程序的执行时间,并且在理解PyCharm中探查器的输出以及如果直接运行cProfile会得到的输出与输出的关系方面遇到困难。 (下面显示了我的输出,突出显示了两行有趣的内容,在尝试进行修复之前,我想确保自己理解正确。)特别是,“时间”和“自己的时间”列代表什么?我猜自己的时间是该函数消耗的时间,减去该函数中进行的任何其他调用的时间,而时间是每个函数所花费的总时间(即,它们分别重命名为tottime和cumtime),但是我可以找不到任何能清楚地记录下来的东西。

此外,我该如何使用PyCharm的探查器或香草cProfile查找有关特别昂贵的功能的更多信息?例如,_strptime似乎花了我很多时间,但是我知道我的代码在四个不同的函数中都使用了它。我想了解一下这200万个调用在我的各个职能中的分布情况。我猜在calc_near_geo_size_and_latency函数中有一个不成比例的数字,但是在重写代码之前,我想要更多的证明。 (我意识到我可以单独分析功能并进行比较,但是我希望有一些简洁的方法。)

我正在使用Python 3.6和PyCharm Professional 2018.3。

Part of the output of profiling the program

1 个答案:

答案 0 :(得分:2)

特别是,“时间”和“自己的时间”列代表什么?我猜Own Time是该函数消耗的时间,减去该函数中进行的任何其他调用的时间,而time是每个函数花费的总时间(即,它们分别重命名为tottime和cumtime),但是我可以找不到任何能清楚地记录下来的东西。

您可以在这里查看自己时间的定义:https://www.jetbrains.com/help/profiler/Reference__Dialog_Boxes__Properties.html

自己的时间-所选功能的自己的执行时间。用括号括起来的自己在这次通话中所花费的时间与该通话所花费的总时间的百分比。

Time-所选函数的执行时间加上此函数调用的函数所花费的所有时间。在此通话中花费的时间百分比与括号中所有通话所花费的时间有关。

这也通过一个小测试得到了证实: enter image description here

enter image description here

此外,我该如何使用PyCharm的探查器或香草cProfile查找有关特别昂贵的功能的更多信息?

默认情况下,pycharm确实将cProfile用作探查器。也许您在问有关在命令行上使用cProfile的问题?这里有很多这样做的示例:https://docs.python.org/3.6/library/profile.html

enter image description here

例如,_strptime似乎花了我很多时间,但是我知道我的代码在四个不同的函数中都使用了它。我想了解一下这200万个调用在我的各个功能中的分布情况。

请注意,测量某物的行为将对检索到的测量值产生影响。对于多次调用的功能或方法,尤其是200万次,分析器本身将对测量值产生重大影响。