我正在写一个程序,它可以阅读数以百万计的学术论文摘要,并从中收集一些数据。我一直在与内存不足的问题,并缩小了几乎所有我可以。你知道吗
我的下一个想法是在我的程序读完一篇摘要后从内存中删除它。这是我的循环:
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
任何帮助都太好了。你知道吗
谢谢你!你知道吗
如果可能的话,你可以像10 Gb的数据一样拆分你的摘要,先读取1 Gb的数据,然后再处理1 Gb的数据,这样处理起来很容易,不会占用太多的时间和内存
要释放
O(1)
中与每个摘要相关联的内存,您可以在处理它之后;这将只保留一个指针,并且速度非常快。你知道吗
不过,最好不要提前阅读所有的摘要,除非你真的因为问题中没有说明的原因而需要。你知道吗
还要注意,支持从序列两端快速追加/删除元素的Python数据结构是deque,而不是list。你知道吗
相关问题 更多 >
编程相关推荐