我有一个关于我所拥有的特定python代码的内存管理的问题。这是代码
def combo_counter(file_path,title_body,validation=None,val_set=None,val_number=None):
combo_count={}
counter=0
with open(file_path+"/Train.csv") as r:
reader=csv.reader(r)
next(r)
if title_body=='body':
for row in reader:
if (validation is not None) and ((int(row[0])>val_set[0]) and (int(row[0])<val_set[-1])):
continue
counter+=1
if counter%10000==0:
print counter
no_stops=body_parser(row)
a=' '.join(no_stops)
b=row[3]
for x, y in product(a.split(), b.split()):
if x+" "+y in combo_count:
combo_count[x+" "+y]+=1
else:
combo_count[x+" "+y]=1
return combo_count
def body_parser(row):
soup=BS(row[2],'html')
for tag in soup.findAll(True):
if tag.name in bad_tags:
tag.extract()
code_removed=soup.renderContents()
tags_removed=re.sub(r'<[^>]+>', '', code_removed)
parse_punct=re.findall(r"[\w+#]+(?:[-'][\w+#]+)*|'|[-.(]+|\S[\w+#]*",tags_removed)
no_punct=' '.join(w.lower() for w in parse_punct if w not in string.punctuation)
no_stops=[b for b in no_punct.split(' ') if not b in stops]
return no_stops
所以基本上我是逐行读取csv文件并解析每一行,然后使用名为combo_count的字典计算共同出现次数。问题是字典一旦导出,只有大约1.2GB,但是当我运行这段代码时,它使用的内存比这多得多。但是,我能看到的唯一会占用大量内存的是字典。我怀疑某些东西正在耗尽它不应该存在的内存。处理完每一行后,除计数字典外,所有内容都应从内存中删除。任何人都可以在代码中看到除了字典之外会耗尽内存的东西吗?我怀疑它在body_parser函数中的某个位置。