以下函数创建一个音频分析对象,它本身有一个
大小为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)