いくつかのカスタム クラスと多くの辞書を使用する大量のコードがあります。多くのクラスには、辞書が属性として追加されます。特にループしている場合、クラスと辞書の一部を手動で削除しても、メモリを使いすぎていることがわかりました。
私が恐れているのは、辞書が削除されていることですが、辞書に含まれるオブジェクトは存続しています。メモリ管理を改善するためにコードをリファクタリングする必要がありますが、迅速な解決策として、辞書を再帰的かつ積極的に削除できることを望んでいました。これはどのように達成されますか?
ここに例があります...
def get_lrg():
return {1: np.zeros((1000,1000,100))}
class H():
def add_lrg(self):
fd = get_lrg()
self.lrg = fd
for cls in ['a', 'b', 'c', 'd']:
exec('{0} = H()'.format(cls) )
exec('{0}.add_lrg()'.format(cls) )
del a
del b
del c
del d
また、これでIpythonで遊んでください:
fd = get_lrg()
fd2 = get_lrg()
F = {1: fd, 2: fd2}
F = {}
F = {1: fd, 2: fd2}
del F[1]
del F
Pythonアプリケーションのメモリ使用量を監視します...辞書「F」が削除された後でもメモリを「解放」しているようには見えません(たとえば、オブジェクトへの参照はありません)。私のマシンで見つけたのは、結果が予測できないということです。メモリがフラッシュされているように見えることもあれば、使用されているように見えることもあります。