Edytuj: Naprawdę doceniam pomoc w znajdowaniu błędów - ale ponieważ może to być trudne do znalezienia/odtworzenia, ogólna pomoc w debugowaniu również byłaby bardzo doceniana! Pomóż mi pomóc sobie! =)Jak usunąć błąd pamięci Pythona?
Edytuj 2: Zawężanie, komentowanie kodu.
Edycja 3: Wygląda na to, że lxml nie jest winowajcą, dziękuję! Pełny skrypt to here. Muszę przejrzeć to, szukając referencji. Jak oni wyglądają?
Edycja 4: Właściwie skrypty zatrzymuje (idzie 100%), w tym,parse_og
częścią. Tak więc edycja 3 jest fałszywa - w jakiś sposób musi to być lxml.
Edycja 5 MAJOR EDIT: Jak sugeruje David Robinson i TankorSmash poniżej, Znalazłem typ data
treści, które wyśle lxml.etree.HTML(data)
w dzikim pętli. (I beztrosko lekceważyć, ale znaleźć moje grzechy odkupił jak już zapłacił cenę w wysokości dodatkowe dwa dni debugowania!;) A working crashing script is here.(Also opened a new question.)
Edycja 6: Okazuje się, że jest to błąd z wersją lxml 2.7.8 i starszą (co najmniej ). Updated to lxml 2.9.0, a błąd zniknął. Dziękuję także znakomitym ludziom pod adresem this follow-up question.
Nie wiem, jak rozwiązać ten dziwny problem, który mam. Poniższy kod działa poprawnie przez około pięć minut, gdy pamięć RAM zostanie nagle całkowicie wypełniona (od 200 MB do 1700 MB w okresie 100% - wtedy gdy pamięć jest pełna, przechodzi w stan niebieski oczekiwania).
Wynika to z poniższego kodu, w szczególności z pierwszych dwóch linii. Na pewno. Ale o co chodzi? Co może wyjaśnić to zachowanie?
def parse_og(self, data):
""" lxml parsing to the bone! """
try:
tree = etree.HTML(data) # << break occurs on this line >>
m = tree.xpath("//meta[@property]")
#for i in m:
# y = i.attrib['property']
# x = i.attrib['content']
# # self.rj[y] = x # commented out in this example because code fails anyway
tree = ''
m = ''
x = ''
y = ''
i = ''
del tree
del m
del x
del y
del i
except Exception:
print 'lxml error: ', sys.exc_info()[1:3]
print len(data)
pass
Czy możesz połączyć HTML 'data', abyśmy mogli przetestować kod? – TankorSmash
'data' to pierwsze 5000 bajtów dowolnego dokumentu HTML. – knutole
Nie jest to trudne, ale wypróbowałeś go na różnych stronach i nie ma znaczenia, jakie dane przekazujesz? – TankorSmash