我对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())
我有以下限制条件:
我想在这里最大程度地减少内存使用量,但是我没有看到关于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
是否允许我像这样缓冲读取以手动管理内存。这样做有什么保证吗?我在文档中找不到提及内存使用或缓冲的信息。