【发布时间】:2016-07-27 15:46:38
【问题描述】:
我正在尝试处理一个 3GB 的 XML 文件,并且在读取文件并将一些数据存储在字典中的循环中间出现内存错误。
class Node(object):
def __init__(self, osmid, latitude, longitude):
self.osmid = int(osmid)
self.latitude = float(latitude)
self.longitude = float(longitude)
self.count = 0
context = cElementTree.iterparse(raw_osm_file, events=("start", "end"))
context = iter(context)
event, root = context.next()
for event, elem in context:
if event == "end" and elem.tag == "node":
lat = float(elem.get('lat'))
lon = float(elem.get('lon'))
osm_id = int(elem.get('id'))
nodes[osm_id] = Node(osm_id, lat, lon)
root.clear()
我正在使用迭代解析方法,因此问题不在于读取文件。我只想将数据存储在字典中以供以后处理,但字典似乎太大了。稍后在程序中我读入链接,需要检查链接引用的节点是否在初始批次节点中,这就是我将它们存储在字典中的原因。
我怎样才能大大减少内存占用(脚本甚至还没有接近完成,所以剃掉一些零碎的东西并没有多大帮助)或大大增加 python 可用的内存量?监控内存使用情况,看起来 python 大约有 1950 MB 的内存,而我的计算机仍有大约 6 GB 的可用 RAM。
【问题讨论】:
-
你运行的是 64 位 Python 吗?
-
天哪,我以为我只是检查了一下,实际上我使用的是 32。据我了解,32 对内存使用量有硬性限制,但 64 没有,对吧?跨度>
-
64 位也有硬性上限,但您不太可能达到它,因为它是 TB 的倍数。
-
@user2913671:64 位也有硬上限。但它至少大了 256 倍(所以 512 GB 而不是 2 GB 的地址空间),我认为此时它通常大 65536 倍(所以 128 TB 的地址空间,我很确定应该足够了)。 :-)
标签: python dictionary memory