我正在编写一个程序,读取数百万张acedemic纸张摘要并从中收集数据。我一直遇到内存耗尽的问题,并且已经缩减了我所能做的一切。
我的下一个想法是在程序读完后从内存中删除一个摘要。这是我的循环:
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
任何帮助都会很棒。
谢谢!
答案 0 :(得分:0)
要释放O(1)
中与每个摘要关联的内存,您可以
abstracts[i] = None
处理后;这将保持一个指针,并将非常快。
然而,更好的是甚至不会提前阅读所有摘要,除非你真的需要那些未在问题中指明的原因。
另请注意,支持从序列两端快速追加/删除元素的Python数据结构是deque,而不是列表。
答案 1 :(得分:-2)
如果可能你可以将你的抽象分解为10 Gb数据首先读取1 gb处理它和接下来1 gb就像它将处理简单并且不会花费太多时间和内存