Intenté procesar varias páginas web con BeautifulSoup4 en Python 2.7.3 pero después de cada análisis, el uso de la memoria aumenta y aumenta.Uso de memoria de Python con BeautifulSoup
Este código simplificado produce el mismo comportamiento:
from bs4 import BeautifulSoup
def parse():
f = open("index.html", "r")
page = BeautifulSoup(f.read(), "lxml")
f.close()
while True:
parse()
raw_input()
Después de llamar parse() por cinco veces el proceso de pitón ya utiliza 30 MB de memoria (archivo HTML utilizado fue de alrededor de 100 kB) y se sube por 4 MB cada llamada. ¿Hay alguna manera de liberar esa memoria o algún tipo de solución?
Actualización: Este comportamiento me da dolores de cabeza. Este código utiliza fácilmente un montón de memoria a pesar de que la variable BeautifulSoup debería suprimirse larga:
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()
Podría ser algún tipo de un error tal vez?
30 MB no es mucho, la recolección de basura podría no haberse activado todavía, supongo ... ¿hay algún problema con la memoria o algo así? – Aprillion