Total memory used by Python process?

前端 未结 12 839
眼角桃花
眼角桃花 2020-11-22 04:28

Is there a way for a Python program to determine how much memory it\'s currently using? I\'ve seen discussions about memory usage for a single object, but what I need is tot

12条回答
  •  梦如初夏
    2020-11-22 04:35

    Below is my function decorator which allows to track how much memory this process consumed before the function call, how much memory it uses after the function call, and how long the function is executed.

    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
    

    So, when you have some function decorated with it

    from utils import track
    
    @track
    def list_create(n):
        print("inside list create")
        return [1] * n
    

    You will be able to see this output:

    inside list create
    list_create: memory before: 45,928,448, after: 46,211,072, consumed: 282,624; exec time: 00:00:00
    

提交回复
热议问题