Я запускаю большой Python3 .7 скрипт с использованием PyCharm и интерфейсом Django, который построчно анализирует текстовые файлы и обрабатывает текст. Он застревает в определенный момент в одном особенно большом файле, и я не могу понять, почему. Как только он застревает, память, которую PyCharm использует в соответствии с диспетчером задач, занимает до 100% свободного времени в течение 5-10 секунд, и мне приходится вручную останавливать выполнение (использование памяти низкое, когда он запускается на других файлах и до выполнение останавливается на большом файле).
Я сузил проблему до следующего l oop:
i = 0
for line in line_list:
label_tmp = self.get_label(line) # note: self because this is all contained in a class
if label_tmp in target_list:
index_dict[i] = line
i += 1
print(i) # this is only here for diagnostic purposes for this issue
Это прекрасно работает для нескольких файлов, которые я ' мы проверили его, но в файле проблемы он остановится на 2494-й итерации (ie при i = 2494). Он делает это, даже когда я удаляю 2494-ю строку файла или когда я удаляю первые 10 строк файла - так что это исключает ошибку в коде любой конкретной строки в файле - он останавливается независимо от того, что в 2494-й строке.
Я создал self.get_label () для создания файла журнала, так как это большая функция. Поиграв, я начал подозревать, что он остановится после определенного количества действий, несмотря ни на что. Например, я добавил следующие фиктивные строки в начало self.get_label ():
log.write('Check1\n')
log.write('Check2\n')
log.write('Check3\n')
log.write('Check4\n')
На 2494-й итерации последней записью в файле журнала является «Check2». Если я внесу некоторые изменения в функцию, она остановится на проверке 4; если я сделаю другие изменения, он остановится на итерации 2493, но остановится на «Check1» или даже сделает все до конца функции.
Я подумал, что проблема может быть связана с памятью из файл журнала, но даже когда я закомментирую строки журнала, код все равно останавливается на 2494-й строке (еще раз, независимо от того, какой текст на самом деле содержится в этой строке) или на 2493-й строке, в зависимости от изменений, которые я делаю.
Независимо от того, что я делаю, выполнение останавливается, тогда память, используемая в соответствии с диспетчером задач, работает до 100%. Важно отметить, что память существенно не увеличивается, пока ПОСЛЕ выполнения не застрянет.
У кого-нибудь есть идеи, что может быть причиной этого? Я не вижу ничего плохого в коде, и тот факт, что он перестает выполняться после определенного количества действий, указывает на то, что я нарушаю какой-то фундаментальный предел, о котором я не знаю.