2016-12-22 2 views
1

В настоящее время я пытался использовать модуль memory_profiler, чтобы получить использованную память как следующий код:модуля для профилирования пикового использования памяти кода Python

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. Это также не показало ошибок, просто ожидая долгого долгого времени, затем я вынужден прекратить выполнение. Кто-нибудь знает лучший способ или решение?

+0

Каков был результат? – pvg

+0

Также есть причина, по которой вы не просто используете декораторы или отчет профилировщика по умолчанию? Использование api более низкого уровня просто усложняет ситуацию в вашем случае, и вы на самом деле ничего не делаете с этим. – pvg

+0

Я бы изменил название вопроса, поскольку то, что является «лучшим», является основополагающим мнением, что является основанием для закрытия вопроса. – abukaj

ответ

2

Простой способ использовать memory_usage, чтобы получить пик/максимальный объем памяти из блока кода является первым поставить этот код в в функции, а затем передать эту функцию - без() call-- чтобы 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

0

В основном я использую Heapy, потому что он действительно прост в использовании.

Просто введите следующий код, где вы хотите проверить использование памяти.

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