gpt4 book ai didi

Python 3.7.4 -> 如何保持低内存使用率?

转载 作者:行者123 更新时间:2023-12-01 06:25:43 24 4
gpt4 key购买 nike

以下代码在给定数据库上检索和创建 uniqueCard 的索引。

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))

CreditCard 对象是唯一在该范围内幸存下来的对象,每个对象的长度约为 64 字节。
运行后,这段代码应该映射大约 1000 万张卡片。这将转换为 6.4 亿字节,或大约 640 兆字节。

问题是这个操作中途,内存消耗达到了3GB左右......

我的第一个猜测是,由于某种原因,GC 没有收集 parsedJson。我应该怎样做才能控制内存消耗?我可以手动处理该对象吗?

编辑1:
信用卡定义为

class CreditCard:
number = 0
knownSince = 0
def __init__(self, num, date):
self.number=num
self.knownSince=date

编辑2:
当我在 creditCards.__len__() 上获得 350 万张卡时,sys.getsizeof(creditCards) 报告 31MB,但该过程消耗 2GB!

最佳答案

问题出在json.load。加载 4MB 会导致内存跳跃 5-8 倍。

编辑:

我设法使用 JSON 的自定义映射器来解决这个问题:

def object_decoder(obj):
if obj.__contains__('key'):
return CreditCard(obj['key'],xy)
return obj

现在内存增长缓慢,我已经能够使用大约 2GB 的内存来解析整个集合

关于Python 3.7.4 -> 如何保持低内存使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com