我使用下面的代码在一个SQL表中插入超过1M的条目(ItemOrderType位是因为我认为我在使用SQLAlchemy的decl enum recipe从另一个源写入条目时出错…)
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(inserts)技巧,插入甚至不会发生,进程只返回一条消息“Killed”。有了它,在它被杀之前我得到了大约75万张唱片。在
当监控top中的进程时,我发现VIRT内存在被杀死之前已经上升到了1200m左右,res保持在230m左右
这是sqlalchemy的漏洞吗?我假设在引擎执行插入后,使用的任何内存都是release?在
这是我在Archlinux上使用的python版本: Python2.7.6(默认值,2014年5月26日,10:25:14) [GCC 4.4.7 20120313(Red Hat 4.4.7-4)]关于linux2
提前谢谢!在
我好像自己解决了。我没有提到我运行flask是为了连接sqlalchemy,而flask本身是在调试模式下运行的,它似乎保存了数据,导致内存耗尽。在
相关问题 更多 >
编程相关推荐