goo blog サービス終了のお知らせ 

路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

プログラムの実行に必要なメモリ量を知りたい

2008-12-12 20:53:40 | プログラミング
あるプログラムを実行して、利用したメモリ量のピークを調べる。

というのをPythonでやってみます。

Windows, CPython 32bit版限定ですが・・・

どうやら、PSAPIのGetProcessMemoryInfoというのを使えば良さそうです。

Pythonからこの関数を呼び出すラッパを書くのは面倒だなあ、と思ったら、
psapi.pyというのがありました。作者のGreg Hazelさんに感謝しつつ、利用します。
http://www.koders.com/python/fid746A02473CB489389E55F55866F023DB7D42D814.aspx?s=suck

psapi.GetProcessMemoryInfoという関数は、引数としてプロセスのハンドルを渡す必要があります。ちょうど、subprocessのPopenのアンドキュメンテッド(?)な_handleというインスタンス変数がハンドルを格納していました。

結果、コードは以下のようになりました。

--------------------
# measureit.py

import sys
import subprocess

import psapi

if __name__ == '__main__':
  if len(sys.argv) == 0:
    print "measureit command-line"
    sys.exit(0)
  
  commandLine = sys.argv[1:]
  
  subp = subprocess.Popen(commandLine)
  subp.wait()
  
  memInfo = psapi.GetProcessMemoryInfo(psapi.DWORD(subp._handle))
  print memInfo["PeakWorkingSetSize"]
  
  sys.exit(subp.returncode)
--------------------

使い方は、対象となるプログラムを呼び出すコマンドラインを、measureit.pyの引数とします。

たとえば、
measureit.py cmd.exe /c
で、cmd.exe /cを実行するのに必要となったメモリ量を印字します。