Edit: Wirklich zu schätzen, Hilfe bei der Suche nach Bug - aber da es möglicherweise schwer zu finden/zu reproduzieren, würde jede allgemeine Debug-Hilfe auch sehr geschätzt werden! Hilf mir, mir selbst zu helfen! =)Wie Python-Speicherfehler zu debuggen?
Edit 2: Eingrenzen, Code auskommentieren.
Edit 3: Es scheint, dass lxml nicht der Schuldige sein kann, danke! Das vollständige Skript lautet here. Ich muss darüber nach Referenzen suchen. Wie sehen Sie aus?
Bearbeiten 4: Eigentlich sind die Skripte stoppen (geht zu 100%) in dieser, derparse_og
Teil davon. Also editieren 3 ist falsch - es muss irgendwie lxml sein.
Edit 5 MAJOR EDIT: Wie unten von David Robinson und TankorSmash vorgeschlagen, ich habe eine Art von data
Inhalt gefunden lxml.etree.HTML(data)
in einer wilden Schleife senden. (I nicht berücksichtigte es nachlässig, aber finde meine Sünden erlöst, wie ich einen Preis in Höhe von zwei zusätzlichen Tagen des Debug bezahlt habe;!) A working crashing script is here.(Also opened a new question.)
bearbeiten 6: Stellt sich heraus, das ist ein Fehler mit Lxml Version 2.7.8 und darunter (unter am wenigsten). Updated to lxml 2.9.0, und der Fehler ist weg. Danke auch an den fein Leute bei this follow-up question.
Ich weiß nicht, wie dieses seltsame Problem zu debuggen, das ich habe. Der unten stehende Code läuft ungefähr fünf Minuten lang, wenn der RAM plötzlich vollständig gefüllt ist (von 200 MB bis 1700 MB während der 100% -Periode - dann, wenn der Speicher voll ist, geht es in den blauen Wartezustand).
Es ist aufgrund des Codes unten, insbesondere die ersten beiden Zeilen. Das ist sicher. Aber was ist los? Was könnte dieses Verhalten möglicherweise erklären?
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
Können Sie die HTML-Daten verknüpfen, damit wir den Code auch testen können? – TankorSmash
'Daten' sind die ersten 5000 Bytes eines HTML-Dokuments. – knutole
Nicht schwierig, aber Sie haben es mit einer Vielzahl von Seiten versucht, und es ist egal, welche Daten Sie weitergeben? – TankorSmash