这个问题的标准答案是使用cProfile。
不过,您会发现, 如果不将代码分成方法,则cProfile不会为您提供特别丰富的信息 。
取而代之的是,您可能想尝试一下这里的另一张海报,称为“ 蒙特卡洛概况”
。引用另一个答案:
如果您急于 在主观上很慢的情况 下在调试器下手动中断程序 ,则有一种简单的方法可以查找性能问题。
暂停几次,每次查看调用堆栈。 如果有一些代码浪费了一定百分比的时间(20%或50%或其他),那么这就是您在每次采样时都将其捕获的概率。
因此,这大约是您将看到样品的百分比。不需要有根据的猜测。如果您确实怀疑问题出在哪里,这将证明或不证明它。您可能会遇到多个不同大小的性能问题。如果您清除其中任何一个,其余的将在以后的传递中占更大的比例,并且更容易发现。
警告:除非他们自己使用过,否则程序员往往会对这种技术持怀疑态度。他们会说分析器会为您提供此信息,但是只有在他们对整个调用堆栈进行采样的情况下,这才是正确的。调用图不会为您提供相同的信息,因为1)它们没有在指令级别上进行汇总,2)在存在递归的情况下它们给出了令人困惑的摘要。他们还会说,它实际上仅对玩具程序有效,而实际上对任何程序都有效,并且似乎在较大的程序上效果更好,因为他们往往会发现更多的问题[
重点 ]。
它不是正统的,但是我在一个使用cProfile进行分析无法提供有用输出的项目中非常成功地使用了它。
最好的是,这在Python中很容易做到。只需在解释器中运行Python脚本,按[Control-C],记下回溯并重复多次。



