2012-02-16 12 views
5

stavo cercando di raschiare alcune informazioni da una pagina del sito per pagina, in fondo qui è quello che ho fatto:di errore "Memoria insufficiente" con 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 

Ebbene, i codici di cui sopra ha finito per buttare fuori "Fuori Memoria "e nel task manager mostra che lo script utilizza quasi 1GB di memoria dopo diverse ore di esecuzione ... come mai ?!

Qualcuno potrebbe dirmi cosa è andato storto?

+2

La prima cosa che cercherò di escludere è che la memoria perde memoria: basta usare 'urllib2.urlopen()'. –

+3

Proprio come una nota, è molto più sdolcinato fare '' per counter in range (5000): ''. E PEP8 raccomanda lower_case_with_underscores per i nomi delle variabili, mentre CamelCase è riservato per le classi. Inoltre, controlla '' with'' per scrivere/leggere su/da file. –

+2

(a) Questo tipo di domanda "cosa succede con il mio codice" è migliore su codereview (b) il riutilizzo delle variabili in quanto tale non è il problema (c) Ulteriori informazioni sulla profilatura della memoria. – Marcin

risposta

13

Questa non è esattamente una perdita di memoria, ma piuttosto una funzionalità non documentata. Fondamentalmente, mechanize.Browser() memorizza collettivamente tutta la cronologia del browser in memoria come va.

Se si aggiunge una chiamata a MechBrowser.clear_history() dopo Response.close(), è necessario risolvere il problema.

Problemi correlati