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