Python でメモリ使用量をプロファイリングする方法
単純なバージョンを実装して最適化することでアルゴリズムを調査する場合、メモリ使用量の分析が重要になることがあります。 Python 3.4 では、tracemalloc モジュールが導入され、どのコード セグメントが最も多くのメモリを割り当てるかについての詳細な洞察が提供されます。
tracemalloc の使用
import tracemalloc tracemalloc.start() # Code to profile... snapshot = tracemalloc.take_snapshot() # Display top memory-consuming lines top_stats = snapshot.statistics('lineno') for index, stat in enumerate(top_stats[:3], 1): frame = stat.traceback[0] print(f"#{index}: {frame.filename}:{frame.lineno}: {stat.size / 1024:.1f} KiB")
例
単語のリスト内の接頭辞をカウントしながらメモリ使用量をプロファイリングします。アメリカ英語辞書:
import tracemalloc import linecache import os tracemalloc.start() words = list(open('/usr/share/dict/american-english')) counts = Counter() for word in words: prefix = word[:3] counts[prefix] += 1 snapshot = tracemalloc.take_snapshot() display_top(snapshot)
出力
Top 3 lines #1: scratches/memory_test.py:37: 6527.1 KiB words = list(words) #2: scratches/memory_test.py:39: 247.7 KiB prefix = word[:3] #3: scratches/memory_test.py:40: 193.0 KiB counts[prefix] += 1 4 other: 4.3 KiB Total allocated size: 6972.1 KiB
メモリを解放するコードの処理
関数の場合大量のメモリを割り当ててからすべてを解放します。技術的にはリークではありませんが、それでも過剰なメモリを消費します。これを考慮するには、関数の実行中にスナップショットを取得するか、別のスレッドを使用してメモリ使用量を監視する必要があります。
以上がPython コードでメモリ使用量をプロファイリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。