我有一个制表符分隔的数据文件,有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

09-11 18:55
查看更多