编辑:非常感谢您在寻找错误方面的帮助 - 但由于它可能很难找到/重现,任何一般的调试帮助也将不胜感激!帮我帮自己!=)
编辑2:缩小范围,注释掉代码。
编辑 3:似乎 lxml 可能不是罪魁祸首,谢谢!完整的脚本在这里。我需要仔细阅读它以寻找参考。他们看起来怎么样?
编辑 4:实际上,脚本在这部分停止(100%) 。parse_og
所以编辑 3 是错误的 - 它一定是 lxml 不知何故。
编辑 5 主要编辑:正如下面大卫罗宾逊和 TankorSmash 所建议的那样,我发现了一种data
将lxml.etree.HTML( data )
在疯狂循环中发送的内容。(我不小心忽略了它,但发现我的罪已被赎回,因为我已经付出了额外两天调试的代价!;) 一个有效的崩溃脚本在这里。 (还提出了一个新问题。)
编辑 6:原来这是 lxml 2.7.8 及以下版本的错误(至少)。更新到 lxml 2.9.0,并且错误消失了。还要感谢这个后续问题的好人。
我不知道如何调试我遇到的这个奇怪的问题。下面的代码可以正常运行大约五分钟,这时 RAM 突然完全填满(在 100% 期间从 200MB 到 1700MB - 然后当内存已满时,它进入蓝色等待状态)。
这是由于下面的代码,特别是前两行。这是肯定的。但这是怎么回事?什么可以解释这种行为?
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