У меня есть многочисленные большие CSV-файлы (~ 400 МБ каждый, нужно обработать тысячи из них, по крайней мере, сто на выполнение программы), содержащие длинные строки в первой ячейке каждой строки (около 100-300 символов в строке на 1 миллион строк на файл), и моя Python программа проверяет, есть ли подстрока в данной строке. Если это так, то я добавляю строку, содержащую строку, в список, чтобы сохранить его в другой серии CSV-файлов после обработки всех входных файлов. Для первых дюжин входных файлов программа запускается примерно по 20 секунд на файл, что меня устраивает.
Соответствующая часть кода (строковая обработка l oop) выглядит так:
check = set(['a','b','c'])
storage = []
data = glob.glob('data_address/*.csv')
for raw_file in data:
read_file = open(raw_file,'r',newline='',encoding='utf-8')
list_file = list(csv.reader((line.replace('\0','') for line in read_file), delimiter=","))
row_count = sum(1 for row in list_file)
for i in range(1, row_count);
text = set(list_file[i][0].split())
if len(check.intersection(text)) > 0:
storage.append(list_file[i])
Проблема в том, что по мере увеличения числа обрабатываемых входных файлов я начинаю иметь определенные файлы, которые занимают гораздо больше времени, чем 20 секунд. Кроме того, эти аномалии обрабатываются все дольше и дольше - на обработку первой аномалии уходит около 50 секунд, а ближе к концу l oop аномалии могут обрабатываться тысячи секунд, что указывает на то, что проблема связана с l oop сам, а не отдельный файл. Эти аномалии явно не отличаются от других файлов с точки зрения количества совпадений строк.
Что я не понимаю, так это то, что увеличение времени обработки не согласовано. У меня все еще есть много 20-секундных файлов между каждой аномалией, поэтому не может быть, чтобы программа просто замедлялась по мере увеличения объема памяти. Кто-нибудь знает, что происходит? В cProfile не отображается какой-либо компонент, который может вызывать проблему.
Я использую 64-битный Python 3.8 на Windows 10 с жестким диском емкостью 1 ТБ и около 10 000 МБ активной памяти.