在python中检测交换

Ell*_*sky 5 python memory

确定运行我的脚本的计算机是否正在使用交换内存的最佳方法是什么?它应该尽可能地跨平台。一种解决方案是像top子进程一样运行程序,但我希望有更好的方法。

Kru*_*pös 5

我在 Stackoverflow : Profile Memory Allocation in Python中看到了如何实时记录内存使用情况的解释。然后使用 直接打印成漂亮的图表mrpof。(该线程有点旧,但我想仍然准确)。

这是该模块的官方文档:内存分析器 pypi 文档

如果您不想阅读文档,您首先必须通过以下方式安装软件包:

$ easy_install -U memory_profiler # pip install -U memory_profiler
Run Code Online (Sandbox Code Playgroud)

然后在这样的脚本上使用它:

$ mprof run you_script_python.py
$ mprof plot
Run Code Online (Sandbox Code Playgroud)

生成这样的文件:(来源

mprof_示例

或者更简单地像这样:

$ python -m memory_profiler you_script_python.py
Run Code Online (Sandbox Code Playgroud)

将产生以下输出:

Line #    Mem usage  Increment   Line Contents
 ==============================================
 3                           @profile
 4      5.97 MB    0.00 MB   def my_func():
 5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
 6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
 7     13.61 MB -152.59 MB       del b
 8     13.61 MB    0.00 MB       return a
Run Code Online (Sandbox Code Playgroud)

它也适用于 Windows。据作者 Fabian Pedregosa 介绍,该模块memory profiler是跨平台的:Stackoverflow:推荐使用哪种 Python 内存分析器?

抱歉所有链接!


小智 5

您可以使用模块psutil。它不是标准库中的模块,您必须使用pip程序包管理器进行安装。

pip install psutil
Run Code Online (Sandbox Code Playgroud)

可以使用收集交换使用数据psutil.swap_memory()。它返回一个命名的元组。

>>> import psutil
>>> psutil.swap_memory()
sswap(total=2097147904L, used=886620160L, free=1210527744L, percent=42.3, sin=1050411008, sout=1906720768)
Run Code Online (Sandbox Code Playgroud)