2012-02-16 3 views
5

Я пытался соскрести некоторую информацию со страницы сайта постранично, в основном, вот что я сделал:«Недостаточно памяти» ошибка Mechanize

import mechanize 
MechBrowser = mechanize.Browser() 

Counter = 0 

while Counter < 5000: 
    Response = MechBrowser.open("http://example.com/page" + str(Counter)) 
    Html = Response.read() 
    Response.close() 

    OutputFile = open("Output.txt", "a") 
    OutputFile.write(Html) 
    OutputFile.close() 

    Counter = Counter + 1 

Ну, вышеуказанные коды в конечном итоге выбрасывая «Из Memory ", а в диспетчере задач это показывает, что скрипт израсходовал почти 1 ГБ памяти после нескольких часов работы ... как получилось ?!

Кто-нибудь скажет мне, что пошло не так?

+2

Первое, что я попытаюсь исключить, - это механизировать утечку памяти - вместо этого используйте 'urllib2.urlopen()'. –

+3

Как примечание, гораздо больше pythonic делать '' для счетчика в диапазоне (5000): ''. И PEP8 рекомендует lower_case_with_underscores для имен переменных, в то время как CamelCase зарезервирован для классов. Кроме того, проверьте '' с'' для записи/чтения в/из файлов. –

+2

(a) Вопрос о том, что происходит с моим кодом, лучше на codereview (b) Повторное использование переменной как таковая не является проблемой (c) Узнайте о профилировании памяти. – Marcin

ответ

13

Это не утечка памяти, а недокументированная функция. В принципе, mechanize.Browser() коллективно сохраняет всю историю браузера в памяти по мере ее поступления.

Если вы добавили звонок в MechBrowser.clear_history() после Response.close(), ему необходимо устранить неполадку.

Смежные вопросы