Я довольно новичок в программировании и не понимаю причины замедления моей программы.Python 3.3 Замедление во время большой петли
Я работаю с наборами данных около 350 000 - 500 000 строк и оценил бы какое-то направление.
Мне нужно проверить все записи в новом списке на старый, чтобы обновить старые записи, а также добавить совершенно новые записи в конец списка.
Если заявление о печати добавлено в цикл переназначения и новое исключение строки, первые несколько тысяч итераций бывают быстрыми, но после этого программа становится очень медленной. (почти 1000 полных циклов в первые 3 секунды, после примерно 20000-й итерации скорость уменьшилась до более чем 100 полных циклов за 5 секунд, а на 60 000-й итерации она медленнее 100 полных петель за 15 секунд.)
ОЗУ использование менее 70% и ЦП поддерживается постоянным между 48 и 50%
код выглядит следующим образом:
import gc
gc.disable() #this was added to possibly improve speed
def updateOldList(oldListOfLists, newListOfLists):
oldListIndexDict = dict()
IDNumber = <index of ID number>
for i in range(len(oldListOfLists)):
oldListIndexDict[oldList[i][IDNumber]] = i
for i in range(len(newListOfLists)):
try:
oldIndex = oldListIndexDict[newListOfLists[i][IDNumber]]
oldListOfLists[oldIndex][0] = newListOfLists[i][0]
oldListOfLists[oldIndex][3] = newListOfLists[i][3]
del(oldListIndexDict[newListOfLists[i][IDNumber]]) #this was added to limit the number of entries in the hash table to attempt to improve speed
except:
oldListOfLists= oldListOfLists + newListOfLists
return oldListOfLists
внутренней списки в каждом из списков списков должны оставаться заказаны поэтому я не думаю, что могу использовать наборы.
Следующие два вопроса были очень похожи, и я попробовал/рассмотрел их комментарии, прежде чем спрашивать.
python function slowing down for no apparent reason
Python function slows down with presence of large list
Что делать, если вы удалите 'gc.disable()'? Такой же? – zch
Так я и имел это вначале, но это было незначительным, добавив его. – user2308425
Не используйте предложение bare, кроме:, точно укажите, что вы хотите поймать, чтобы скрыть ошибки. Моя забота на первый взгляд заключалась в том, что ваша старая = старая + новая строка копирует и уничтожает большие и большие списки каждой итерации цикла. Вместо этого используйте old.extend (new). – gps