【发布时间】:2015-03-10 11:19:20
【问题描述】:
我有一个 Python 脚本,它查看一个已通过 Beautiful Soup 传递的 XML 文件,以查找文本术语。然后我遍历到我想要提取的值并返回字符串。这行得通,但是当我在程序主循环中添加了对该函数的调用时,我最终遇到了 MemoryError 问题。查看Windows任务管理器发现每次调用后内存都没有释放,系统内存不足。问题似乎是“return myLink.string”行。这是否持有对内存中对象的引用,我该如何解决这个问题?
def FindUptime(soup):
link = soup.find(text=re.compile("Uptime"))
if link:
myLink = link.parent
myLink = myLink.next_sibling
if myLink.string == "Up:":
myLink = myLink.next_sibling
myLink = myLink.next_element
else:
print "Can't find Up: term"
return myLink.string
else:
print "Can't find Uptime"
return ""
调用者
readings[sensorIds[i][SENSOR_NAME]] = FindUptime(soup)
【问题讨论】:
-
程序主循环中返回的链接怎么办?
-
嗨,返回结果被分配到一个结果字典。 (该脚本将服务器的正常运行时间汇总到一个字典中,然后将其写入 Powerpoint 报告)
-
嗨,返回结果被分配到一个结果字典。 (该脚本将服务器的正常运行时间汇总到一个字典中,然后将其写入 Powerpoint 报告)
-
你能做到以下几点:返回一个常量或一个像“100”这样的新字符串,而不是
myLink.string,看看会发生什么?如果内存问题仍然存在,那么soup可能在其方法的某处存在泄漏。另外,我会尝试只使用一次re.compile()并在所有后续find()s 中使用结果(仅用于测试) -
尝试使用汤,但在返回
myLink.string之前将字符串值复制到新的、干净的 Python 本机类型字符串中,然后返回复制的字符串。我有一个模糊的怀疑 myLink.string 可能有一些隐藏的引用。
标签: python memory beautifulsoup