Python 3.7.4 -> How to keep memory usage low?
以下代码在给定数据库上检索、创建和索引 uniqueCards。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | for x in range(2010,2015): for y in range(1,13): index = str(x)+"-"+str("0"+str(y) if y<10 else y) url = urlBase.replace("INDEX",index) response = requests.post(url,data=query,auth=(user,pwd)) if response.status_code != 200: continue #this is a big json, around 4MB each parsedJson = json.loads(response.content)["aggregations"]["uniqCards"]["buckets"] for z in parsedJson: valKey = 0 ind = 0 header = str(z["key"])[:8] if header in headers: ind = headers.index(header) else: headers.append(header) valKey = int(str(ind)+str(z["key"])[8:]) creditCards.append(CreditCard(valKey,x*100+y)) |
运行后,这段代码应该映射大约 1000 万张卡片。这将转换为 6.4 亿字节,或大约 640 兆字节。
问题是在这个操作中途,内存消耗达到了大约 3GB...
我的第一个猜测是,出于某种原因,GC 没有收集
编辑1:
CreditCard 定义为
1 2 3 4 5 6 | class CreditCard: number = 0 knownSince = 0 def __init__(self, num, date): self.number=num self.knownSince=date |
编辑2:
当我在
问题是
编辑:
我设法使用 JSON 的自定义映射器来解决这个问题:
1 2 3 4 | def object_decoder(obj): if obj.__contains__('key'): return CreditCard(obj['key'],xy) return obj |
现在内存增长缓慢,我已经能够使用大约 2GB 的内存解析整个集合