用于分析Python代码的峰值内存使用情况的模块

时间:2016-12-22 06:16:47

标签: python python-2.7 python-3.x memory-profiling

目前,我尝试使用memory_profiler模块获取已用内存,如下面的代码:

from memory_profiler import memory_usage
memories=[]
def get_memory(mem,ended):
  if ended:
    highest_mem=max(mem)
    print highest_mem
  else:
  memories.append(mem)

def f1():
  #do something
  ended=False
  get_memory(memory_usage(),ended)
  return #something
def f2():
  #do something
  ended=False
  get_memory(memory_usage(),ended)
  return #something

#main
f1()
f2()
ended=True
get_memory(memory_usage(),ended) #code end

>>>#output
# output 
# highest memory 

然而,它没有成功执行。当结束= True时它被卡住并发送了memory_usage()的值并结束了get_memory的功能。它也没有显示任何错误。只是等了很长时间,然后我强行停止执行。谁知道更好的方法或解决方案?

2 个答案:

答案 0 :(得分:4)

使用memory_usage从代码块中获取峰值/最大内存的简单方法是首先将该代码放入函数中,然后将该函数 - 没有()调用传递给{{ 1}}作为memory_usage()参数:

proc

其他参数允许您收集时间戳,返回值,将参数传递给def myfunc(): # code return mem = max(memory_usage(proc=myfunc)) print("Maximum memory used: {0} MiB".format(str(mem))) 等。文档字符串似乎是文档的唯一完整来源:https://github.com/fabianp/memory_profiler/blob/master/memory_profiler.py

答案 1 :(得分:0)

我主要使用 Heapy ,因为它非常易于使用。

只需键入以下代码,以测试内存使用情况。

from guppy import hpy
hp = hpy()
print hp.heap()