我有一个制表符分隔的数据文件,有200多万行和19列。
你可以在美国找到它。
我开始运行以下命令,但使用for l in f.readlines()
。我知道只要遍历文件应该会更有效率,所以我在下面发布。不过,有了这个小小的优化,我在进程中使用了30%的内存,只完成了约6.5%的记录看起来,以这种速度,它将像以前一样耗尽内存。而且,我的功能很慢。我能做些什么来加快速度吗?每次循环都有助于del
对象吗?
def run():
from geonames.models import POI
f = file('data/US.txt')
for l in f:
li = l.split('\t')
try:
p = POI()
p.geonameid = li[0]
p.name = li[1]
p.asciiname = li[2]
p.alternatenames = li[3]
p.point = "POINT(%s %s)" % (li[5], li[4])
p.feature_class = li[6]
p.feature_code = li[7]
p.country_code = li[8]
p.ccs2 = li[9]
p.admin1_code = li[10]
p.admin2_code = li[11]
p.admin3_code = li[12]
p.admin4_code = li[13]
p.population = li[14]
p.elevation = li[15]
p.gtopo30 = li[16]
p.timezone = li[17]
p.modification_date = li[18]
p.save()
except IndexError:
pass
if __name__ == "__main__":
run()
编辑,更多细节(显然很重要的部分):
当脚本运行并保存更多行时,内存消耗将增加。
方法,.save()是一个掺伪的django模型方法,具有唯一的_slug片段,正在写入postgreSQL/postgis数据库。
解决方法:调试Django中的数据库日志消耗内存。
最佳答案
确保django的调试设置设置为false