我正在写一个程序,它可以读取数以百万计的学术论文摘要,并从中收集数据。我一直有内存不足的问题,并已缩小了几乎所有我可以。
我的下一个想法是在我的程序读完后从内存中删除一个摘要。这是我的循环:

for i in range(0, len(abstracts)):
        abstract = abstracts[i]
        name = abstract.id
        self.Xdict[name] = self.Xdata.getData(abstract)
        self.Ydict[name] = self.Ydata.getData(abstract)
        sys.stdout.write("\rScanned Papers: %d" % count) #A visual counter
        sys.stdout.flush()
        count += 1
    sys.stdout.write("\rScanned Papers: %d" % count)
    sys.stdout.flush()

这是我的代码,没有任何从内存中删除项目的方法。我目前尝试使用:
del abstracts[0]  # This is too slow
abstracts = abstracts[1:]   # This is way too slow
abstract = abstracts.pop(0)  # Doesn't seem to free up any memory

任何帮助都太棒了。
谢谢您!

最佳答案

要释放O(1)中与每个摘要相关联的内存,可以执行以下操作

abstracts[i] = None

在处理之后;这将只保留一个指针,并且速度非常快。
不过,最好不要预先阅读所有的摘要,除非你真的需要,因为问题中没有具体说明的原因。
还要注意,支持从序列两端快速追加/删除元素的Python数据结构是deque,而不是list。

10-06 09:08