Python内存监测实战:使用memory_profiler与mprof绘制运行曲线
本文介绍如何使用memory_profiler及其mprof命令监测Python函数的最大内存消耗。通过安装memory_profiler和psutil,在命令行执行mprof run生成.dat数据文件,并利用mprof plot绘制内存随时间变化的统计图。同时提供了解决GBK解码错误的代码修改方案及@profile装饰器的使用注意事项。
此前为寻找能输出Python函数运行时最大内存消耗的有效方法,查阅了大量博客与知乎文章并尝试多种方案,最终选定利用memory_profiler库中的mprof功能进行测量。该工具的原理是在代码执行期间每隔0.1秒统计一次内存使用情况,并生成相应的统计图表。
具体操作步骤如下:
首先需安装memory_profiler和psutil库(psutil主要用于提升memory_profiler的性能,建议一并安装),可通过pip命令直接完成安装。
pip install memory_profiler pip install psutil
具体运行方式如下:在待检测代码所在的目录下打开命令行终端,执行相应命令。
mprof run test.py
执行后将生成一个.dat格式的数据文件,例如“mprofile_20160716170529.dat”,该文件记录了内存使用量随时间变化的详细数据。
mprof plot
使用上述命令可以将数据以图片形式直观展示出来。
若在运行过程中遇到gbk解码错误,解决方法是首先打开memory_profiler.py文件,定位到第1131行代码处。
将原有的with open(filename) as f:修改为with open(filename, encoding='utf-8') as f:即可解决该问题。
错误提示通常为:UnicodeDecodeError: ‘gbk' codec can't decode byte 0xad in position 337: illegal multibyte sequence


值得注意的是,尽管网上多数教程建议在待检测函数前添加@profile修饰器,但在Anaconda Python3.6环境中,该修饰器始终无法生效,强行添加会导致报错,而未添加该修饰器时程序运行正常。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









