我的函數按以下方式逐行處理文件。 定義了多種錯誤模式,並且需要應用到每一行。 我使用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
快速問題。什麼是'線'?它從何而來? –