我试图描述我们的django单元测试(如果测试速度更快,我们会经常运行它们)。我通过python的内置cProfile分析器运行它,生成一个pstats文件。
然而,信噪比很差。列出的功能太多了。当我进行一次数据库查询时,会调用大量的django内部函数。这使得很难看到发生了什么。
无论如何,我可以“汇总”某个目录之外的所有函数调用吗?
e.g。如果我在我的目录之外调用一个python函数,然后调用其他5个函数(都在我的目录之外),那么它应该滚动所有这些函数,所以它看起来只有一个函数调用,它应该显示累计时间对于整个事情。
如果你想描述(比如说)Django,这显然是不好的,但我不想这样做。
我查看了pstats.Stats对象,但看不到明显的方法来修改这些数据。
答案 0 :(得分:1)
我对python没什么经验,但在性能调优方面有很多,所以这里有可能:
不是将分析作为单元测试的一部分运行,而是进行总体执行时间测量。如果这些变化不大,那就没关系。
当您检测到更改时,或者您只是想让事情更快时,请使用this method。正如你所说,它具有更高的“信噪比”。
不同之处在于,您并不希望分析器能够找出您需要查看的内容。它更像是调试器中的断点,其中断点不是在您选择的位置发生,而是在不必要的缓慢时发生。 如果在两次或多次情况下你看到它做了一些可能被更好的东西取代的东西,平均来说它会得到回报,修复它会使同样的方法更容易找到其他问题。