Tôi đã cố gắng xử lý một số trang web với BeautifulSoup4 trong python 2.7.3 nhưng sau mỗi lần phân tích mức sử dụng bộ nhớ tăng lên và tăng lên.Sử dụng bộ nhớ cao của Python với BeautifulSoup
đang đơn giản hóa này tạo ra những hành vi tương tự:
from bs4 import BeautifulSoup
def parse():
f = open("index.html", "r")
page = BeautifulSoup(f.read(), "lxml")
f.close()
while True:
parse()
raw_input()
Sau khi gọi parse() cho năm lần so với quá trình trăn đã sử dụng 30 MB bộ nhớ (sử dụng tập tin HTML là khoảng 100 kB) và nó đi lên bằng 4 MB mỗi cuộc gọi. Có cách nào để giải phóng bộ nhớ đó hoặc một số cách giải quyết khác không?
Cập nhật: Hành vi này khiến tôi đau đầu. Mã này dễ dàng sử dụng nhiều bộ nhớ mặc dù biến BeautifulSoup sẽ bị xóa vĩnh viễn:
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()
Có thể là một loại lỗi nào đó?
30 MB không nhiều, bộ sưu tập rác có thể chưa được kích hoạt nhưng tôi đoán .. có vấn đề gì với bộ nhớ hay gì đó không? – Aprillion