我的函数按以下方式逐行处理文件。 定义了多种错误模式,并且需要应用到每一行。 我使用multiprocessing.Pool来处理块中的文件。Python re.match递归调用内存泄漏
1G文件的内存使用量增加到2G。 即使在文件处理后仍保持在2G。 文件最后关闭。
如果我注释掉re_pat.match的调用,内存使用情况正常,并且保持在100Mb以下。
我是否以错误的方式使用re? 我找不出解决内存泄漏的方法。
def line_match(lines, errors)
for error in errors:
try:
re_pat = re.compile(error['pattern'])
except Exception:
print_error
continue
for line in lines:
m = re_pat.match(line)
# other code to handle matched object
def process_large_file(fo):
p = multiprocessing.Pool()
while True:
lines = list(itertools.islice(fo, line_per_proc))
if not lines:
break
result = p.apply_async(line_match, args=(errors, lines))
注: 我省略了一些代码,因为我觉得显著的区别是有/无re_pat.match(...)
你的代码到底在做什么?目前还不清楚。 –
@cᴏʟᴅsᴘᴇᴇᴅ我更新了代码缩进。它将错误模式列表应用到文件的每一行以查找匹配的对象。 – Mayling
快速问题。什么是'线'?它从何而来? –