Я пишу сценарий для сопоставления списка 350K шаблонов с большими файлами (каждый 700+ МБ, содержащий 7M строк), используя pyahocorasick. Однако каждый раз, когда я добираюсь до третьего файла (около 3,3 млн строк), сценарий уничтожается.
Я подозреваю, что есть утечка памяти, потому что использование памяти продолжает расти. Однако я не могу сказать, какая именно часть вызывает утечку памяти. Я запускаю скрипт на ВМ Ubuntu 16.04 с 4 ГБ памяти, используя Python 2.7.
Код выглядит следующим образом.
import ahocorasick as ac
a = ac.Automaton()
def create_automaton():
# Create AC automaton
with open(COMMON_FILE, "r") as fin_common:
for common in fin_common:
common = common.strip()
a.add_word(common, common)
a.make_automaton()
def write_output(csv_file):
com_filename = os.path.basename(csv_file)
out_com_file = COMMON_CSV_PATH + "ext_" + com_filename
fout_com = open(out_com_file, "w")
num_line = 0
with open(csv_file, "r") as fin_all:
for line in fin_all:
num_line += 1
if num_line % 100000 == 0:
print "\tFile: %s\tLine %s" % (com_filename, num_line)
matches = a.iter(line)
m = next(matches, None)
if m is not None:
fout_com.write("%s" % line)
fout_com.close()
def main():
create_automaton()
for csv_file in glob.glob(CSV_PATH + "*.csv"):
write_output(csv_file)
if __name__ == '__main__':
main()
Может кто-нибудь помочь мне выяснить, где утечка памяти есть?