我在理解诸如此类的东西的内存占用方面有些麻烦
import urllib.request
with urllib.request.urlopen(url) as response:
for line in response:
parsed_line = line.decode('utf-8').split(',')
#do something
其中url是指向一些大的换行符分隔的文本文件的链接
引擎盖下会发生什么?如果我的文件大40Mb,python会在40Mb的空间分配还是可以“流式传输”文件,而python只需要分配一行的大小?
编辑
按照一位评论者的建议,我使用了“ memory_profiler”模块,结果如下:
Line# Mem usage Increment Line Contents
44 44.8906 MiB 44.8906 MiB @profile(precision=4)
45 def my_func():
46
47 52.5234 MiB 7.6328 MiB a = [1] * (10 ** 6)
48 205.1133 MiB 152.5898 MiB b = [2] * (2 * 10 ** 7)
49 52.5234 MiB -152.5898 MiB del b
50
54 52.5234 MiB 0.0000 MiB url = "my_url"
55 54.9727 MiB 2.4492 MiB with urllib.request.urlopen(url) as response:
56 55.4141 MiB 0.0078 MiB for line in response:
57 55.4062 MiB 0.1484 MiB parsed_line = line.decode('utf-8').split(',')
+ 7MiB和+ 150MiB是有意义的(尽管2 * 10 ^ 7 int(我认为是4个字节)的列表表示80MiB而不是150MiB)
该文本文件约为100KB,打开URL时看到的增量为2.5MB。我不太明白为什么。