Di bawah ini adalah dekorator fungsi saya yang memungkinkan untuk melacak berapa banyak memori yang digunakan proses ini sebelum panggilan fungsi, berapa banyak memori yang digunakan setelah panggilan fungsi, dan berapa lama fungsi ini dijalankan.
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
Jadi, ketika Anda memiliki beberapa fungsi yang dihiasi dengannya
from utils import track
@track
def list_create(n):
print("inside list create")
return [1] * n
Anda akan dapat melihat output ini:
inside list create
list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
psutil
adalah lintas platform dan dapat mengembalikan nilai yang sama denganps
alat baris perintah: pythonhosted.org/psutil/#psutil.Process.memory_info