vik*_*kas 5 python memory-profiling
我运行mprof run some-executable并生成了一个*.dat文件。
文件的每一列代表什么*.dat意思?
vikas@some-host$ cat mprofile_20150224012014.dat
CMDLINE python ../asl
MEM 0.332031 1424769614.8950
MEM 7.593750 1424769614.9954
MEM 8.816406 1424769615.0957
MEM 8.816406 1424769615.1960
Run Code Online (Sandbox Code Playgroud)
第一/第二/第三列代表什么?
[编辑]: 我也无法运行 mprof run --python。这是我收到的错误(导入错误)......看起来它无法获取配置的定义
(virtualenv)vikas@host:$ ./mprof run --python ../myfile.py
mprof:每0.1s采样一次内存
作为 Python 程序运行...
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/home/vikask/memory_profiler-0.32/memory_profiler.py", line 853, in <module>
execfile(__file__, ns, ns)
File "../myfile.py", line 19, in <module>
from bsite import models, security
File "/home/vikas/bsite/models.py", line 12, in <module>
from bsite import config
ImportError: cannot import name config
Run Code Online (Sandbox Code Playgroud)
第一列:“MEM”只是一个标签。
第二列:RSS(驻留集大小),以兆字节为单位。所以您的进程最终使用了 8.8 MB。
第三列:Unix 时间戳:
>>> import time
>>> print(time.ctime(1424769615.1960))
Tue Feb 24 01:20:15 2015
Run Code Online (Sandbox Code Playgroud)
看起来mprof只是随着时间的推移记录进程大小。如果您想要有关程序内部的更多具体细节(逐行),您似乎可以使用mprof run --python file.py来获取该信息(您还需要使用 来装饰您的函数@profile,请参阅文档中的“用法”部分)。
编辑:响应您发布的 ImportError 和回溯:您收到该错误是因为您将文件作为"../myfile.py". 由于您位于bsite目录之外,因此无法找到该config.py文件。
您需要像这样运行该程序:
$ cd /home/vikas/bsite/
$ /home/vikask/memory_profiler-0.32/mprof run --python myfile.py
Run Code Online (Sandbox Code Playgroud)
这样您就可以在正确的目录中import工作了。
让它工作的另一种方法是将项目构建为 python 包。当您执行此操作时,您的文件可以从任何地方正确导入。设置起来有点复杂,但这是一个很好的主意。
另一个更黑客的选择是修改PYTHONPATH或sys.path让导入工作。例如这样:
$ cd /home/vikask/memory_profiler-0.32/
$ PYTHONPATH=/home/vikas/bsite/ ./mprof run --python ../myfile.py
Run Code Online (Sandbox Code Playgroud)
最后,看起来您是mprof直接从 memory_profiler 源运行该命令。您可以通过在该目录中执行“ python setup.py install”(或使用pip install memory_profiler)来安装该软件包。mprof然后,您的 PATH 中应该包含该命令,并且可以从任何目录运行它。