Unten ist mein Funktionsdekorator, mit dem Sie verfolgen können, wie viel Speicher dieser Prozess vor dem Funktionsaufruf verbraucht hat, wie viel Speicher er nach dem Funktionsaufruf verwendet und wie lange die Funktion ausgeführt wird.
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
Also, wenn Sie eine Funktion damit dekoriert haben
from utils import track
@track
def list_create(n):
print("inside list create")
return [1] * n
Sie können diese Ausgabe sehen:
inside list create
list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
psutil
ist plattformübergreifend und kann dieselben Werte wie dasps
Befehlszeilentool zurückgeben: pythonhosted.org/psutil/#psutil.Process.memory_info