Di seguito è riportato il mio decoratore di funzioni che consente di tenere traccia della quantità di memoria consumata da questo processo prima della chiamata di funzione, della quantità di memoria utilizzata dopo la chiamata di funzione e per quanto tempo viene eseguita la funzione.
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
Quindi, quando hai qualche funzione decorata con esso
from utils import track
@track
def list_create(n):
print("inside list create")
return [1] * n
Sarai in grado di vedere questo output:
inside list create
list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
psutil
è multipiattaforma e può restituire gli stessi valori dellops
strumento da riga di comando: pythonhosted.org/psutil/#psutil.Process.memory_info