Pythonでメモリ管理が必要になった時に調べたことのメモ
スクリプト言語でもライブラリなどを使用して処理した時に、どの程度メモリに余裕があるのか、どの程度メモリを使用したのかDebugしたいときに頻繁に次の処理を使います。
メモリ使用量の確認関数
Python:
import psutil
import os
# 現在のプロセスのメモリ使用量を取得する関数
def get_memory_usage():
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
return memory_info.rss # 実メモリ使用量 (バイト単位)
現在のメモリ使用量の情報をバイト(B)単位で取得する関数を使います。
メモリ使用量の表示使用例
Python:
import psutil
import os
# 現在のプロセスのメモリ使用量を取得する関数
def get_memory_usage():
process = psutil.Process(os.getpid())
memory_info = process.memory_info()
return memory_info.rss # 実メモリ使用量 (バイト単位)
print(f"Memory Size: {get_memory_usage() / 1024 / 1024:.2f} MB")
10行目:
バイト単位で取得したメモリ使用量を、1024(2の10乗)で2回割ることで、KB→MB単位に変換し、print文でLogへメモリ使用量を表示します。
Log出力例:
Memory Size: 496.50 MB
メモリ解放方法例
Python:
import gc
# 任意の変数 or リスト or ...
del hogehoge
# メモリを解放(ガベージコレクション実行)
gc.collect()
C言語などでは、free関数などを用いて使用しないメモリ領域を明示的に解放しますが、
Pythonでも同じようにdelを用いて変数やオブジェクトの明示的な解放を行います。
基本的にPythonのメモリ管理は、参照カウントとガベージコレクションなどを用いて、自動的に行われますが、コード作成者の意図に基づいてメモリ管理を行うことでさらに効率的な処理が可能になります。
Refs:
以上