Ниже приведен мой декоратор функций, который позволяет отслеживать, сколько памяти потребляет этот процесс до вызова функции, сколько памяти он использует после вызова функции и как долго выполняется функция.
import time
import os
import psutil
def elapsed_since(start):
return time.strftime("%H:%M:%S", time.gmtime(time.time() - start))
def get_process_memory():
process = psutil.Process(os.getpid())
return process.memory_info().rss
def track(func):
def wrapper(*args, **kwargs):
mem_before = get_process_memory()
start = time.time()
result = func(*args, **kwargs)
elapsed_time = elapsed_since(start)
mem_after = get_process_memory()
print("{}: memory before: {:,}, after: {:,}, consumed: {:,}; exec time: {}".format(
func.__name__,
mem_before, mem_after, mem_after - mem_before,
elapsed_time))
return result
return wrapper
Итак, когда у вас есть какая-то функция, украшенная этим
from utils import track
@track
def list_create(n):
print("inside list create")
return [1] * n
Вы сможете увидеть этот вывод:
inside list create
list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
psutil
кросс - платформенный и может возвращать то же значение , какps
инструмент командной строки: pythonhosted.org/psutil/#psutil.Process.memory_info