You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何像计时一样简便测量函数执行的内存占用?

Python函数内存占用测量的简便方法

当然有啦!就像你用timeit来统计函数执行时间那样,Python里也有不少简便的工具可以帮你测量函数运行时的内存占用,还能像存计时结果一样把内存数据存进列表里~

方法一:用memory_profiler(第三方库,功能丰富)

这个库用法和timeit一样直观,还能给出函数执行过程中的内存变化细节,先安装它:

pip install memory-profiler

下面是和你计时逻辑对应的示例代码,能同时记录耗时和内存占用并存入列表:

from memory_profiler import memory_usage
from timeit import default_timer as timer
import random

# 模拟你的随机数据生成函数
def getRand(k, randStart, randDivisor):
    return [random.uniform(randStart, k/randDivisor) for _ in range(k)]

# 模拟你要测试的业务函数
def your_target_function(data):
    # 这里替换成你实际的函数逻辑
    processed_data = [x * 2 for x in data]
    return processed_data

# 用来存储结果的列表
memoryPerTenRuns = []
timePerTenRuns = []
numRuns = [10, 20, 30]  # 你的测试次数列表

for run_count in numRuns:
    # 生成随机测试数据
    randList = getRand(1000, 0, 2)
    
    # 计时+测内存
    start = timer()
    # memory_usage接收(函数, 参数元组),返回执行过程中内存采样的列表
    mem_samples = memory_usage((your_target_function, (randList,)))
    end = timer()
    
    # 记录耗时和内存峰值(也可以用sum(mem_samples)/len(mem_samples)取平均值)
    timePerTenRuns.append(end - start)
    memoryPerTenRuns.append(max(mem_samples))

print("每次运行耗时:", timePerTenRuns)
print("每次运行内存峰值(MB):", memoryPerTenRuns)

如果需要看每行代码的内存占用,可以给函数加上@profile装饰器,然后用命令python -m memory_profiler your_script.py运行,就能得到逐行的内存统计啦。

方法二:用tracemalloc(Python标准库,无需额外安装)

如果你不想装第三方库,Python自带的tracemalloc模块完全能满足基础的内存测量需求,用法同样简单:

import tracemalloc
from timeit import default_timer as timer
import random

def getRand(k, randStart, randDivisor):
    return [random.uniform(randStart, k/randDivisor) for _ in range(k)]

def your_target_function(data):
    processed_data = [x * 2 for x in data]
    return processed_data

memoryPerTenRuns = []
timePerTenRuns = []
numRuns = [10, 20, 30]

for run_count in numRuns:
    randList = getRand(1000, 0, 2)
    
    start = timer()
    # 启动内存追踪
    tracemalloc.start()
    your_target_function(randList)
    # 获取当前内存和峰值(单位:字节)
    current_mem, peak_mem = tracemalloc.get_traced_memory()
    tracemalloc.stop()
    end = timer()
    
    timePerTenRuns.append(end - start)
    # 转换为MB更易读
    memoryPerTenRuns.append(peak_mem / 10**6)

print("每次运行耗时:", timePerTenRuns)
print("每次运行内存峰值(MB):", memoryPerTenRuns)

这个方法的优势是无需额外依赖,适合轻量场景,get_traced_memory()直接返回运行过程中的内存峰值,非常方便。

内容的提问来源于stack exchange,提问作者R. Anstotz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:22