python性能测量工具cProfile使用解析
背景:
Python是一种解释性的语言,执行速度相比C、C++等语言十分缓慢;因此我们需要在其它地方上下功夫来提高代码的执行速度。
首先需要对代码进行分析,这个时候则需要用一些工具。
这里介绍cProfile:
全代码分析:
命令行:
cProfile-stottimeyour_program.py
结果如下:
ncallstottimepercallcumtimepercallfilename:lineno(function) 660.0010.00011.8500.180base.py:228(micro_service) 660.0030.00011.8490.180tools.py:557(micro_service) 10560.0010.00011.0730.010connection.py:463(drain_events) 10560.0150.00011.0720.010connection.py:466(blocking_read) 10560.0080.00010.9200.010transport.py:233(read_frame) 31680.0140.00010.9080.003transport.py:370(_read) 316810.8920.00310.8920.003{method'recv'of'_socket.socket'objects} 660.0010.0009.8140.149rpc.py:350(__call__) 660.0010.0008.3950.127rpc.py:329(result)
块分析:
上面属于文件分析,但是我们可能只对部分代码感兴趣,那么只需要在这部分代码的前后加上下面这两段代码即可:
importcProfile cp=cProfile.Profile() cp.enable() YOURCODE cp.disable() cp.print_stats()
结果与全代码分析的类似,但是只包含你感兴趣的部分。
行分析:
行分析需要安装line_profiler:
pipinstallline_profiler
@profile defclass_name() pass
然后在命令行输入:
kernprof-l-vyour_code.py -l逐行分析 -v立即查看结果
示例:
fromcProfileimportProfileasprofile frompstatsimportStats def(): p=profile() p.snapshot_stats() p.enable() p.disable() p.print_stats(2)#按照调用累加总耗时累加排序,即将最耗时的函数最优先 p.dump_stats("call.log")
关于profile和cProfile的更多链接,请点击:
https://docs.python.org/3/library/profile.html?spm=5176.100239.0.0.qa5fU5
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。