用range进行python循环需要注意的问题

今天将数据迁移脚步初步写好,输入是要迁移的记录id范围,比如[minId, maxId]。主函数体大概如下:

#  migrate the table range from [minId, maxId], with data patch
def migrate(tableName, minId, maxId):
    for id in range(minId, maxId):
        migrate_one(id)
    # now [minId, maxId] have been migrate, we should deal with the retry queue
    print "now begin to process the retry queue!"
    while retry_queue:
        id = retry_queue.pop()
        migrate_one(id)
一开始测试用小范围数据进行测试,没有问题。想测试一下性能,将范围设置为2亿,结果发现内存立刻飙升到100%,过了一会shell打印了一个killed process出来。纳闷了,因为我是很小心的使用内存的,包括数据库连接,自己搞了个连接池控制,一条记录一条记录的读取的,cursor也有注意关闭。没理由内存溢出啊。将代码认真检查了一下,发现了这一行代码有最大的嫌疑:
for id in range(minId, maxId):
查看了一下API,发现是range(..)是生成一个List对象,当这个范围很大的时候,比如我们上面的例子2亿,4G的内存必然溢出。
写的时候都是边查文档边写的,一知半解是很可怕的,在使用一个API或者语法的时候,还是要先仔细学习一下的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值