2024-10-06 12:39:07 发布
网友
Possible Duplicate:How to profile my code?
什么是分析和性能测试python代码的最佳实践和工具? 任何快速的胜利或建议。
CProfile seams很流行,下面有一些很棒的注释/答案,都是很好的答案/教程。投票表决,我会在一两天内选出第一名。谢谢@senderle和@campos.ddc
一旦发现问题区域,是否有任何习惯用法和/或转换代码以使其更快的提示?
^{}是典型的分析工具。使用它的基本方法是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
percall
tottime / ncalls
cumtime
filename:lineno(func_name)
在大多数情况下,首先看ncalls和tottime。在上面的数据中,您可以看到这个程序花费的大部分时间发生在extract_number。此外,我们可以看到extract_number被称为多次(1000014)次。因此,我所能做的任何加速extract_number的事情都将显著加快此测试代码的执行速度。如果它使我获得一微秒,那么增益将乘以1000014,得到一个完整的秒增益。
extract_number
那我就去做generate_numbers。那里的收益不会那么重要,但它们可能仍然是重要的,因为这个功能再燃烧0.7秒,有一些好处。
generate_numbers
这应该给你一个大概的想法。但是,请注意,tottime数字有时可能是欺骗性的,例如在递归的情况下。
^{} 是典型的分析工具。使用它的基本方法是like so:
在这里,我在我编写的mersenne twister的引用实现的测试例程中调用了它。
ncalls
是调用函数的次数。tottime
是在函数中花费的总时间,不包括在子函数调用中花费的时间。percall
是tottime / ncalls
。cumtime
是在函数中花费的时间,包括在子函数调用中花费的时间。剩下的数据如下:filename:lineno(func_name)
。在大多数情况下,首先看
ncalls
和tottime
。在上面的数据中,您可以看到这个程序花费的大部分时间发生在extract_number
。此外,我们可以看到extract_number
被称为多次(1000014)次。因此,我所能做的任何加速extract_number
的事情都将显著加快此测试代码的执行速度。如果它使我获得一微秒,那么增益将乘以1000014,得到一个完整的秒增益。那我就去做
generate_numbers
。那里的收益不会那么重要,但它们可能仍然是重要的,因为这个功能再燃烧0.7秒,有一些好处。这应该给你一个大概的想法。但是,请注意,
tottime
数字有时可能是欺骗性的,例如在递归的情况下。相关问题 更多 >
编程相关推荐