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