Я пытаюсь загрузить (и сохранить) двоичный файл из Интернета, используя Python 2.6 и urllib.
Насколько я понимаю, read (), readline () и readlines () - это 3 способа чтения файлового объекта.
Поскольку двоичные файлы на самом деле не разбиваются на символы новой строки, read () и readlines () читают весь файл в память.
Является ли выбор размера буфера произвольного чтения () наиболее эффективным способом ограничения использования памяти во время этого процесса?
т.е.
import urllib
import os
title = 'MyFile'
downloadurl = 'http://somedomain.com/myfile.avi'
webFile = urllib.urlopen(downloadurl)
mydirpath = os.path.join('c:', os.sep,'mydirectory',\
downloadurl.split('/')[-1])
if not os.path.exists(mydirpath):
print "Downloading...%s" % title
localFile = open(mydirpath, 'wb')
data = webFile.read(1000000) #1MB at a time
while data:
localFile.write(data)
data = webFile.read(1000000) #1MB at a time
webFile.close()
localFile.close()
print "Finished downloading: %s" % title
else:
print "%s already exists." % mydirypath
Я выбрал read (1000000) произвольно, потому что он работал и уменьшал использование оперативной памяти. Я предполагаю, что если бы я работал с необработанным сетевым буфером, выбор случайного количества был бы плохим, поскольку буфер мог бы работать всухую, если скорость передачи была слишком низкой. Но кажется, что urllib уже обрабатывает буферизацию более низкого уровня для меня.
Имея это в виду, хорошо ли выбрать произвольное число? Есть ли лучший способ?
Спасибо.