什么是分析和性能测试 python 代码的最佳实践和工具? [复制]
Posted
技术标签:
【中文标题】什么是分析和性能测试 python 代码的最佳实践和工具? [复制]【英文标题】:Whats are best practices and tools for profiling and performance testing python code? [duplicate] 【发布时间】:2012-02-23 00:54:26 【问题描述】:可能重复:How to profile my code?
什么是分析和性能测试 python 代码的最佳实践和工具? 这里有任何快速的胜利或建议。
CProfile 接缝很受欢迎,下面有一些很棒的注释/答案,都是非常好的答案/教程。投票吧,我会在一两天内选出前一个。谢谢@senderle 和@campos.ddc
一旦发现问题区域,是否有任何习语和/或提示可以转换代码以使其更快?
【问题讨论】:
很好的链接,谢谢瑞克。我会检查一下。除了 profiling 还有什么其他的习语吗? Here's a quick win. 【参考方案1】:cProfile
是经典的分析工具。基本使用方式是like so:
python -m cProfile myscript.py
在这里,我在我编写的mersenne twister 的参考实现的测试例程中调用了它。
me@mine $ python -m cProfile mersenne.twister.py
True
True
1000000
1003236 function calls in 2.163 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 2.163 2.163 <string>:1(<module>)
1 0.001 0.001 2.162 2.162 mersenne.twister.py:1(<module>)
3 0.001 0.000 0.001 0.000 mersenne.twister.py:10(init_gen)
1000014 1.039 0.000 1.821 0.000 mersenne.twister.py:19(extract_number)
1 0.000 0.000 0.000 0.000 mersenne.twister.py:3(Twister)
1603 0.766 0.000 0.782 0.000 mersenne.twister.py:33(generate_numbers)
1 0.000 0.000 0.000 0.000 mersenne.twister.py:4(__init__)
1 0.317 0.317 2.161 2.161 mersenne.twister.py:42(_test)
1 0.001 0.001 2.163 2.163 execfile
1 0.000 0.000 0.000 0.000 len
1 0.000 0.000 0.000 0.000 method 'disable' of '_lsprof.Profiler' objects
1608 0.038 0.000 0.038 0.000 range
ncalls
是函数被调用的次数。 tottime
是函数花费的总时间,不包括子函数调用花费的时间。 percall
是 tottime / ncalls
。 cumtime
是函数花费的时间包括子函数调用花费的时间。剩下的数据如下:filename:lineno(func_name)
。
在大多数情况下,首先查看ncalls
和tottime
。在上面的数据中,你可以看到这个程序花费的大部分时间都发生在extract_number
。此外,我们可以看到 extract_number
被调用 many (1000014) 次。所以我能做的任何事情来加速extract_number
都会显着加速这个测试代码的执行。如果它让我获得了 微秒,那么增益将乘以 1000014,得到一整秒的增益。
那么我应该在generate_numbers
上工作。那里的收益不会那么重要,但它们可能仍然很重要,并且由于该功能会再消耗 0.7 秒,因此会有一些好处。
这应该会给你一个大致的想法。但是请注意,tottime
数字有时可能具有欺骗性,例如在递归的情况下。
【讨论】:
感谢 senderle,关于如何解释结果并采取行动的任何提示? @MattAlcock 您可能想查看有关 profiling 的 python 官方文档:docs.python.org/library/profile.html以上是关于什么是分析和性能测试 python 代码的最佳实践和工具? [复制]的主要内容,如果未能解决你的问题,请参考以下文章