🔄
Pythonメモリ問題の解決策: ガベージコレクションからプロセスの削除まで
はじめに
pythonでメモリに悩まされたことはありませんか?MemoryError
に苦しんだことはありませんか?
今回はpythonのメモリを解放する方法を簡単に紹介します。
ガベージコレクション&メモリの最適化
import gc
import ctypes
gc.collect()
libc = ctypes.CDLL("libc.so.6")
libc.malloc_trim(0) #メモリアロケーションのための内部データ構造の最適化
ctypes
は、pythonからC互換のデータ型およびC共有ライブラリを使って動的リンクするためのモジュールです。libc.so.6
はLinuxの標準Cライブラリです。
pythonの一部ライブラリはC言語で動いているので、メモリアロケーションの最適化が効く場合があります。
オブジェクトの削除
del {オブジェクト}
メモリ節約の観点だと、使用済みのオブジェクトを都度削除すると良いです。
プロセスの削除
% kill -9 {プロセスID}
終了したと思い込んでいるプロセスがCPUのメモリを占有しているケースがあるので、top
やjobs
などで不要なプロセスを確認して削除してください。
その他
今回は触れていませんが、以下の記事でメモリ管理について説明されています。
Discussion