请求期间urllib的内存使用情况

时间:2018-12-10 21:27:06

标签: python memory-management urllib

我对Python 2和3具有以下常规设置,以支持下载〜8MiB二进制有效负载:

import six

if six.PY3:
    from urllib.request import Request, urlopen
else:
    from urllib2 import Request, urlopen

def request(url, method='GET'):
    r = Request(url)
    r.get_method = lambda: method

    response = urlopen(r)

    return response

def download_payload():
    with open('output.bin', 'w') as f:
        f.write(request(URL).read())

我有以下限制条件:

  • 它必须适用于Python 2和3
  • 它必须几乎没有依赖性,因为它将作为Ansible模块在各种发行版,Ubuntu,RHEL,Fedora,Debian等上运行。

我想在这里最大程度地减少内存使用量,但是我没有看到关于urllib内部工作方式的任何文档;它是否总是将响应读入内存,还是可以在末端进行手动缓冲以将内存使用量固定在缓冲区大小?

我正在考虑做这样的事情:

def download_payload():
    with open('output.bin', 'w') as f:
        r = request(URL)
        hunk = r.read(8192)
        while len(hunk) > 0:
            f.write(hunk)
            hunk = r.read(8192)

我遇到的问题是urllib是否允许我像这样缓冲读取以手动管理内存。这样做有什么保证吗?我在文档中找不到提及内存使用或缓冲的信息。

0 个答案:

没有答案