我正在使用以下代码在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
提前致谢!
答案 0 :(得分:0)
我似乎已经解决了这个问题。我没有提到我正在运行烧瓶以连接sqlalchemy,烧瓶本身在调试模式下运行,这似乎保留了数据,导致内存耗尽。