Python line-by-line memory profiler?

前端 未结 2 1417
南方客
南方客 2021-02-01 16:11

I\'m looking to generate, from a large Python codebase, a summary of heap usage or memory allocations over the course of a function\'s run.

I\'m familiar with heapy, and

2条回答
  •  星月不相逢
    2021-02-01 16:58

    I would use sys.settrace at program startup to register a custom tracer function. The custom_trace_function will be called for each line of code. Then you can use that function to store information gathered by heapy or meliae in a file for later processing.

    Here is a very simple example which logs the output of hpy.heap() each second to a plain text file:

    import sys
    import time
    import atexit
    from guppy import hpy
    
    _last_log_time = time.time()
    _logfile = open('logfile.txt', 'w')
    
    def heapy_profile(frame, event, arg):
        currtime = time.time()
        if currtime - _last_log_time < 1:
            return
        _last_log_time = currtime
        code = frame.f_code
        filename = code.co_filename
        lineno = code.co_firstlineno
        idset = hpy().heap()
        logfile.write('%s %s:%s\n%s\n\n' % (currtime, filename, lineno, idset))
        logfile.flush()
    
    atexit.register(_logfile.close)
    sys.settrace(heapy_profile)
    

提交回复
热议问题