如何在 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中文网其他相关文章!