Ci-dessous, mon décorateur de fonction qui permet de suivre la quantité de mémoire consommée par ce processus avant l'appel de fonction, la quantité de mémoire qu'il utilise après l'appel de fonction et la durée d'exécution de la fonction.
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
Donc, quand vous avez une fonction décorée avec
from utils import track
@track
def list_create(n):
print("inside list create")
return [1] * n
Vous pourrez voir cette sortie:
inside list create
list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
psutil
est multiplateforme et peut renvoyer les mêmes valeurs que l'ps
outil de ligne de commande: pythonhosted.org/psutil/#psutil.Process.memory_info