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

如何在Python中测量代码各部分(如循环)的RAM占用并设置阈值中断?

解决方案

要实现特定代码段(比如每个for循环)的内存监控、阈值中断和用量统计,你可以基于psutil扩展实现——核心思路是记录代码段执行前的内存基线,实时计算当前内存与基线的差值,以此得到该代码段的内存增量。以下是完整的可运行方案:

步骤说明

  • 先获取进程初始内存作为基线,每次循环操作后计算内存增量,判断是否超过阈值
  • 内存单位统一转换为MB(方便和1GB=1024MB的阈值对比)
  • 封装内存获取逻辑为函数,简化代码复用

完整代码示例

import psutil
import os

def get_current_memory_mb():
    """获取当前进程的内存占用(单位:MB)"""
    process = psutil.Process(os.getpid())
    return process.memory_info().rss / (1024 * 1024)

# 初始化字典
dict1 = {}
dict2 = {}
dict3 = {}

# 监控第一个循环
print("=== 监控第一个循环 ===")
base_memory = get_current_memory_mb()
loop1_used_max = 0
for i in range(200):
    # 模拟填充dict1的操作(可替换为你的实际逻辑)
    dict1[i] = str(i) * 100000
    
    current_memory = get_current_memory_mb()
    loop_used = current_memory - base_memory
    # 更新该循环的最大内存占用
    if loop_used > loop1_used_max:
        loop1_used_max = loop_used
    
    # 判断是否超过1GB阈值
    if loop_used > 1024:
        print(f"第一个循环内存占用超过1GB,已中断。当前使用: {loop_used:.2f} MB")
        break
else:
    # 循环正常结束(未触发break)
    print(f"第一个循环正常完成,最大内存使用: {loop1_used_max:.2f} MB")

# 监控第二个循环
print("\n=== 监控第二个循环 ===")
base_memory = get_current_memory_mb()
loop2_used_max = 0
for i in range(500):
    dict2[i] = str(i) * 150000
    
    current_memory = get_current_memory_mb()
    loop_used = current_memory - base_memory
    if loop_used > loop2_used_max:
        loop2_used_max = loop_used
    
    if loop_used > 1024:
        print(f"第二个循环内存占用超过1GB,已中断。当前使用: {loop_used:.2f} MB")
        break
else:
    print(f"第二个循环正常完成,最大内存使用: {loop2_used_max:.2f} MB")

# 监控第三个循环
print("\n=== 监控第三个循环 ===")
base_memory = get_current_memory_mb()
loop3_used_max = 0
for i in range(800):
    dict3[i] = str(i) * 200000
    
    current_memory = get_current_memory_mb()
    loop_used = current_memory - base_memory
    if loop_used > loop3_used_max:
        loop3_used_max = loop_used
    
    if loop_used > 1024:
        print(f"第三个循环内存占用超过1GB,已中断。当前使用: {loop_used:.2f} MB")
        break
else:
    print(f"第三个循环正常完成,最大内存使用: {loop3_used_max:.2f} MB")

关键细节解释

  1. 内存基线的作用:每个循环开始前记录base_memory,后续计算的loop_used = 当前内存 - 基线就是该循环单独占用的内存增量,排除了进程其他部分的内存消耗。
  2. 实时监控与阈值判断:每次循环迭代后都检查内存增量,一旦超过1024MB(1GB)就立即中断循环。
  3. 最大内存统计:记录循环执行过程中的最大内存增量,能准确反映该循环的峰值内存占用。
  4. 循环else分支:当循环正常完成(未触发break)时,输出正常完成的提示和最大内存使用量。

内容的提问来源于stack exchange,提问作者Orca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:15:33