跟踪Python函数中的内存使用源

时间:2014-08-18 17:23:33

标签: python memory-profiling

以下函数创建一个音频分析对象,它本身有一个 大小为64字节(根据sys.getsizeof),但函数本身是 使用超过100MB内存的6MB mp3文件。

 def main(input_filename):
     audiofile = audio.LocalAudioFile(input_filename)

我使用memory_profiler进行了分析(感谢Huy Nguen)并使用了Pympler(来自SO answer)来探索对象的大小,数量和类型(结果其中包括以下共享。甚至使用os.stat(input_filename)statinfo2.st_size在Python中确认输入文件本身的大小。文件和对象组合的总大小似乎是11MiB(基本上是MB) )。

这是否意味着我必须深入研究创建对象的LocalAudioFile类所做的调用?如果是这样,是否需要在外部模块本身的代码中完成,或者可能通过试验它的代码副本?

                       types |   # objects |   total size
============================ | =========== | ============
                        dict |        2564 |      3.42 MB
                         str |       14790 |      2.43 MB
                       float |       35420 |    830.16 KB
                     unicode |        9552 |    792.63 KB
                        code |        5670 |    708.75 KB
                        list |        3160 |    606.56 KB
                        type |         484 |    427.28 KB
          wrapper_descriptor |        1658 |    129.53 KB
                       tuple |        1227 |     91.00 KB
  builtin_function_or_method |        1094 |     76.92 KB
                     weakref |         894 |     76.83 KB
           method_descriptor |         899 |     63.21 KB
                         set |         151 |     53.21 KB
           getset_descriptor |         645 |     45.35 KB
                         int |        1657 |     38.84 KB

内存分析结果:

Line #    Mem usage    Increment   Line Contents
================================================
    30   20.395 MiB    0.000 MiB   @profile
    31                             def main(input_filename, input_filename2):
    32   24.250 MiB    3.855 MiB       audiofile = audio.LocalAudioFile(input_filename) #250kb audio file
    33  139.988 MiB  115.738 MiB       audiofile2 = audio.LocalAudioFile(input_filename2) # 6MB audio file
    #irrelevant profiling code removed
    47  146.531 MiB    0.477 MiB       summary.print_(sum1)

0 个答案:

没有答案