Ошибка «Недостаточно памяти» при механизации - PullRequest
5 голосов
/ 16 февраля 2012

Я пытался собирать некоторую информацию со страницы веб-сайта, в основном вот что я сделал:

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

Что ж, вышеприведенные коды закончили тем, что выдавали ошибку «Недостаточно памяти» и выполняли задачуДиспетчер показывает, что сценарий израсходовал почти 1 ГБ памяти после нескольких часов работы ... почему?!

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

1 Ответ

14 голосов
/ 18 февраля 2012

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

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

...