Может ли Pickle обрабатывать файлы, большие, чем оперативная память, установленная на моей машине?

Я использую pickle для сохранения на диске моего классификатора NLP, встроенного в библиотеку TextBlob.

Я использую pickle после многих поисков, связанных с этим вопросом. На данный момент я работаю локально, и у меня нет проблем с загрузкой файла pickle (который составляет 1.5 ГБ) с моей i7 и 16-гигабайтной оперативной машиной. Но идея состоит в том, что моя программа в будущем должна запускаться на моем сервере, на которой установлена ​​только RAM 512 МБ.

Может ли мариновать ручку такого большого файла или я буду сталкиваться с проблемами памяти?

На моем сервере у меня установлен Python 3.5, и это сервер Linux (не уверен, какой дистрибутив).

Я спрашиваю, потому что на данный момент я не могу получить доступ к своему серверу, поэтому я не могу просто попытаться выяснить, что происходит, но в то же время я сомневаюсь, могу ли я поддерживать этот подход, или у меня есть найти другие решения.

Ответы

Ответ 1

К сожалению, это трудно точно ответить без тестирования на вашем компьютере.

Вот несколько начальных мыслей:

  • Не существует ограничения по размеру, который должен использовать модуль Pickle, но вы нажимаете границы его предполагаемого использования. Он не предназначен для отдельных крупных объектов. Однако с тех пор, как вы используете Python 3.5, вы сможете воспользоваться PEP 3154, который добавляет лучшую поддержку для больших объектов. Вы должны указать pickle.HIGHEST_PROTOCOL, когда вы dump ваши данные.

  • Вероятно, у вас будет большой успех, потому что вы пытаетесь справиться с объектом, размером 3x в вашей памяти. Ваша система, вероятно, начнет замену и, возможно, даже переломит. В наши дни операционная система настолько дешевая, что она должна быть значительно меньше 2 ГБ.

  • Чтобы обрабатывать свопинг, убедитесь, что у вас достаточно свободного пространства подкачки (большой раздел подкачки, если вы на Linux, или достаточно места для файла подкачки на вашем основном разделе в Windows).

  • Как показано , Pickle не очень дружелюбен к потреблению RAM во время процесса травления, поэтому вам, возможно, придется иметь дело с Python, пытающимся получить даже больше памяти из ОС, чем 1,5 ГБ, которые мы можем ожидать для вашего объекта.

Учитывая эти соображения, я не ожидаю, что он будет очень хорошо работать для вас. Я настоятельно рекомендую обновить ОЗУ на вашей целевой машине, чтобы сделать эту работу.

Ответ 2

Я не вижу, как вы могли load объект в ОЗУ, превышающий ОЗУ. т.е. bytes(num_bytes_greater_than_ram) всегда будет поднимать значение MemoryError.