SQLAlchemy - 插入> 1M行 - 进程被杀死

时间:2014-12-07 21:44:10

标签: python memory-management flask sqlalchemy

我正在使用以下代码在SQL表中插入超过1M的条目(ItemOrderType位是因为我认为在使用SQLAlchemy的decl枚举配方从其他源编写条目时出错了... )

def run_import():
    with open('listings.csv', 'r') as csv_file:
        reader = csv.reader(csv_file, delimiter=";")
        inserts = []
        for row in reader:
            inserts.append({'item_id': int(row[0]),
                            'order_type': ItemOrderType.from_string(row[1].replace('<','').replace('>','')),
                            'listings': int(row[2]),
                            'unit_price': int(row[3]),
                            'quantity': int(row[4])})

            if len(inserts) == 10000:
                db.engine.execute(ItemOrder.__table__.insert(), inserts)
                inserts = []
        db.engine.execute(ItemOrder.__table__.insert(), inserts)

无论哪种方式,没有len(插入)技巧,插入都不会发生,该过程只返回消息“Killed”。有了它,我会在它被杀之前得到大约750k的记录。

当监控顶部的过程时,我发现VIRT内存在被杀之前上升到大约1200米,res停留在230米左右。

这是sqlalchemy的漏洞吗?我假设在引擎执行插入后,使用的任何内存都是释放?

这是我在Archlinux上使用的python版本: Python 2.7.6(默认,2014年5月26日,10:25:14) [gCC 4.4.7 20120313(Red Hat 4.4.7-4)] on linux2

提前致谢!

1 个答案:

答案 0 :(得分:0)

我似乎已经解决了这个问题。我没有提到我正在运行烧瓶以连接sqlalchemy,烧瓶本身在调试模式下运行,这似乎保留了数据,导致内存耗尽。