python tracemalloc最大占用内存统计

问题

设计一个程序,需要统计消耗时间和内存资源占用(Max)

memory_profiler或者(c)Profiler家族对内存细节使用都比较详细

但在这里,我只想了解内存最大的占用

解决

tracemalloc是用来分析Python程序内存分配的工具,是一个集成到内置库的工具。

tracemalloc.get_traced_memory()

获取由跟踪的内存块的当前大小和峰值大小 tracemalloc 作为元组的模块: (current: int, peak: int) .

import tracemalloc

if __name__ == '__main__':

    tracemalloc.start(25)  # 默认25个片段,这个本质还是多次采样
    cs.run()  # 这是我自己定义的对象成员函数
    # 记录所有跟踪内存块的当前大小和峰值大小
    size, peak = tracemalloc.get_traced_memory()
    # 一个输出到控制台中,一个输出到文件
    print('memory blocks:{:>10.4f} KiB'.format(peak / 1024))
    print('memory blocks:{:>10.4f} KiB'.format(peak / 1024), file=out_file)

实验

测算,内存消耗统计对算法总时间的影响(控制台输出)

1测算时间+内存

cs_algorithm function took 13499.0010 ms
memory blocks:  211.6133 KiB

2测算时间

cs_algorithm function took  4989.0032 ms

通过相同实验时间对比发现,加载tracemalloc模块进行内存统计,确实降低了程序运行效率,造成额外的计算时间。

时间消耗统计函数

def timing(f):
    """Decorator to check the time taken to execute a function."""
    def wrap(*args):
        time1 = time.time()
        ret = f(*args)
        time2 = time.time()
        time_taken = (time2 - time1) * 1000.0
        print('{0} function took {1:>10.4f} ms'.format(f.__name__, time_taken))
        print(DELIMITER1, file=out_file)
        print('{0} function took {1:>10.4f} ms'.format(f.__name__, time_taken), file=out_file)
        print(DELIMITER2, file=out_file)
        return ret
    return wrap

 

你可能感兴趣的:(python,python,tracemolloc,内存统计,计算时间,算法评估)