Files
project_6/ixformer_sdk/testing/memory_monitor.py

38 lines
943 B
Python
Raw Normal View History

from psutil import Process
def get_current_memory(pid=None):
return Process(pid).memory_full_info()
class MemoryMonitorContext(object):
def __init__(self, pid=None):
self._pid = pid
self.reset()
def __enter__(self):
self._enter_memory = self._get_used_memory()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self._exit_memory = self._get_used_memory()
return self
def _get_used_memory(self) -> float:
mem = get_current_memory(self._pid)
return mem.uss
def reset(self):
self._enter_memory = -1
self._exit_memory = -1
def delta(self) -> float:
if self._enter_memory < 0:
raise RuntimeError("Please using context manager to wrap your code.")
if self._exit_memory < 0:
return self._get_used_memory() - self._enter_memory
return self._exit_memory - self._enter_memory