Задать вопрос
@TomRiddle
Я здесь, потому что ничего не нагуглил XD

Как избежать ошибки MemoryError?

Есть программа, которая принимает список xlsx файлов и прогоняет их построчно по очереди, достает нужные сведения и сопоставляет их между собой (ищет совпадения в файлах и так далее..)
Выглядит примерно так:

key_info = {}
for file in tuple_of_files:
    wb = openpyxl.load_workbook(file, read_only=True)
    first_sheet = wb.sheetnames[0]
    for row in wb[first_sheet].rows:
        #тут фрагмент кода чтобы достать из строки нужный объект, который мы сохраняем в переменную var_info
        if var_info not in key_info:
            key_info[var_info] = {'count' : 1, 'reg' : None, 'oper' : None, 'time_use' : set(),  'imeis' : set()}
            #далее фрагмент кода по вычислению и заполнению подсловаря для этого объекта
        if var_info in key_info:
            key_info[var_info]['count'] += 1
            key_info[var_info]['time_use'].add(some_info)
            key_info[var_info]['imeis'].add(some_other_info)

Потом используя словарь с ключевыми значениями key_info создаю xlsx файл и записываю в него результаты анализа.
Программа работает, пока общее число строк в передаваемых ей файлах не превышает примерно 1млн, и в целом делает свою работу. Но когда пытаешься передать файлы с большим объемом (общее число строк около 5млн), то возникает ошибка memoryError.
Я понимаю, что это из-за того, что словарь key_info просто уже не может вмещать информацию, однако разбить его на несколько других файлов или обнулять через определенное число строк, никак не получится - теряется весь функционал проверки..

Как можно избежать этой ошибки? Зависит ли она от мощности используемого ПК?
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@noremorse_ru
if var_info in key_info:
заменить на else
Множества set() тебе зачем? Они сами по себе тяжелые, возьми список
Ну и самое главное, зачем ты хранишь все в памяти? Пиши результаты в бд или файл. Или ты можешь отправить их на удаленный сервер асинхронно, который запишет в бд, всё зависит на сколько ты далеко хочешь зайти))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы