あるプログラムを実行して、利用したメモリ量のピークを調べる。
というのを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を実行するのに必要となったメモリ量を印字します。
というのを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を実行するのに必要となったメモリ量を印字します。