Stavo cercando di elaborare diverse pagine Web con BeautifulSoup4 in python 2.7.3 ma dopo ogni analisi l'utilizzo della memoria aumenta.Utilizzo di memoria alta Python con BeautifulSoup
Questo codice semplificato produce lo stesso comportamento:
from bs4 import BeautifulSoup
def parse():
f = open("index.html", "r")
page = BeautifulSoup(f.read(), "lxml")
f.close()
while True:
parse()
raw_input()
Dopo aver chiamato parse() per cinque volte il processo di Python utilizza già 30 MB di memoria (file HTML utilizzato è stato di circa 100 kB) e si va da 4 MB ogni chiamata. C'è un modo per liberare quella memoria o qualche tipo di soluzione alternativa?
Aggiornamento: Questo comportamento mi dà mal di testa. Questo codice utilizza facilmente fino un sacco di memoria, anche se la variabile BeautifulSoup dovrebbe essere lunga cancellata:
from bs4 import BeautifulSoup
import threading, httplib, gc
class pageThread(threading.Thread):
def run(self):
con = httplib.HTTPConnection("stackoverflow.com")
con.request("GET", "/")
res = con.getresponse()
if res.status == 200:
page = BeautifulSoup(res.read(), "lxml")
con.close()
def load():
t = list()
for i in range(5):
t.append(pageThread())
t[i].start()
for thread in t:
thread.join()
while not raw_input("load? "):
gc.collect()
load()
Che potrebbe essere una specie di bug forse?
30 MB non è molto, la raccolta dei dati inutili potrebbe non essere stata ancora attivata, suppongo .. c'è un problema con la memoria o qualcosa del genere? – Aprillion