分析一个程序的性能可以归结为回答4个基本的问题:
1.它运行的有多块? 2.那里是速度的瓶颈? 3.它使用了多少内存? 4.哪里发生了内存泄漏?
Unix time 命令
/usr/bin/time -p python julia1_nopil.py
/usr/bin/time --verbose python julia1_nopil.py
timeit
python -m timeit -n 5 -r 5
对于要长期运行的代码来说,最好指定循环次数(-n 5)以及重复次数(-r 5)。timeit 会对语句循环执行 n 次并计算平均值作为一个结果,重复 r 次并选出最好的那个结果
time.time()
分析器逐行统计时间和执行频率 line_profiler 库
@profile装饰器
kernprof -l -v fib.py
-l选项通知kernprof注入@profile装饰器到你的脚步的内建函数,-v选项通知kernprof在脚本执行完毕的时候显示计时信息。上述脚本的输出看起来像这样:
寻找具有高Hits值或高Time值的行。这些就是可以通过优化带来最大改善的地方。
内存分析 memory_profiler 库
@profile装饰器
python -m memory_profiler primes.py
内存泄漏 objgraph 库
显示占据python程序内存的头N个对象 显示一段时间以后哪些对象被删除活增加了 在我们的脚本中显示某个给定对象的所有引用