2016-06-11 47 views
2

確定運行腳本的計算機是否使用交換內存的最佳方法是什麼?它應該儘可能跨平臺。一種解決方案是運行一個像top這樣的程序作爲子程序,但我希望有更好的方法。在python中檢測交換

+0

命令'免費-m'可能是你的興趣,爲[這篇文章nixCraft(http://www.cyberciti.biz/faq/linux-add-a-swap-中所看到的file-howto /),section *我如何驗證swap是否被激活?* – grooveplex

+0

最跨平臺的方法是佔用並填充內存,直到你得到異常,並在最後捕獲異常並打印'我使用交換內存' – fghj

+2

你可以使用'psutil'。它不在標準庫中,但它是跨平臺的。你可以使用'psutil.swap_memory()'獲得交換內存的信息。 – 2016-06-11 08:50:52

回答

3

您可以使用模塊psutil。它不是標準庫中的模塊,但您必須使用pip程序包管理器進行安裝。

pip install psutil 

交換使用數據可以使用psutil.swap_memory()收集。它返回一個指定的元組。

>>> import psutil 
>>> psutil.swap_memory() 
sswap(total=2097147904L, used=886620160L, free=1210527744L, percent=42.3, sin=1050411008, sout=1906720768) 
3

我在這個帖子中看到了Stackoverflow: Profile Memory Allocation in Python這個關於如何實時記錄你的記憶的解釋。然後使用mrpof直接打印成一個不錯的圖表。 (該線程有點舊,但我仍然準確)。

這裏是模塊的官方文檔:memory profiler pypi documentation

如果你不想閱讀的文檔,您必須首先通過安裝的軟件包:

$ easy_install -U memory_profiler # pip install -U memory_profiler 

,然後用它像這樣的腳本:

$ mprof run you_script_python.py 
$ mprof plot 

即產生一個文件是這樣的:(source

mprof_example

或者更簡單地說是這樣的:

$ python -m memory_profiler you_script_python.py 

將產生以下的輸出:

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 

它也適用於Windows。根據作者Fabian Pedregosa,模塊memory profiler是跨平臺的:Stackoverflow: Which Python memory profiler is recommended?

對不起,所有鏈接!