Python механизирует извлечение файлов размером более 1 ГБ

Я пытаюсь загрузить некоторые файлы через mechanize. Файлы размером менее 1 ГБ загружаются без каких-либо проблем. Однако, если файл больше 1 ГБ, сценарию не хватает памяти:

Сценарий mechanize_response.py выбрасывает из памяти следующую строку self.__cache.write(self.wrapped.read())

__cache - это cStringIO.StringIO, кажется, что он не может обрабатывать более 1 ГБ.

Как скачать файлы размером более 1 Гб?

Спасибо


person syd101    schedule 27.09.2015    source источник
comment
Как вы думаете, почему StringIO не может с этим справиться? Не более ли вероятно, что вашей программе не хватило памяти? Попробуйте запустить его на 64-битной машине с большим объемом памяти.   -  person strubbly    schedule 27.09.2015
comment
Моя машина 64-битная машина. И у меня 8 ГБ оперативной памяти, и это единственная работающая программа.   -  person syd101    schedule 27.09.2015


Ответы (2)


Похоже, вы пытаетесь загрузить файл в память, но у вас его недостаточно. Попробуйте использовать метод retrieve с именем файла для потоковой передачи загруженного файла на диск.

person strubbly    schedule 27.09.2015
comment
Это то, что я уже использую. Я также пытался использовать browser.open(), и я читаю файл по частям, а затем записываю его в локальный файл, но я все еще получаю ту же ошибку из памяти после 1 ГБ, но на этот раз из read() в механизировать _responce.py - person syd101; 27.09.2015

Наконец-то я нашел обходной путь. Помимо использования browser.retrieve или browser.open, я использовал mechanize.urlopen, который возвращал обработчик urllib2. Это позволило мне загружать файлы размером более 1 ГБ.

Мне все еще интересно выяснить, как заставить работать файлы размером более 1 ГБ.

person syd101    schedule 27.09.2015
comment
Похоже, это лучший ответ на данный момент. Могу ли я предложить вам расширить вопрос, чтобы показать оператор извлечения, который вы используете, - это сделает вопрос и ответ более полезным для других читателей - что является точкой переполнения стека. - person strubbly; 27.09.2015