python3内存使用流式传输大文件

时间:2018-08-04 10:12:43

标签: python-3.x

我在理解诸如此类的东西的内存占用方面有些麻烦

    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。我不太明白为什么。

0 个答案:

没有答案