У нас есть веб-сервер на основе Python, который запускает несколько больших файлов данных при запуске, используя cPickle
. Файлы данных (перехваченные с использованием HIGHEST_PROTOCOL
) занимают около 0,4 ГБ на диске и загружаются в память как около 1,2 ГБ объектов Python - это занимает около 20 секунд . Мы используем Python 2.6 на 64-битных компьютерах с Windows.
Узким местом, безусловно, является не диск (для реального чтения такого количества данных требуется менее 0,5 с), а выделение памяти и создание объектов (создаются миллионы объектов). Мы хотим уменьшить 20 с, чтобы уменьшить время запуска.
Есть ли способ десериализации более чем 1 ГБ объектов в Python намного быстрее, чем cPickle
(например, 5-10x)? Поскольку время выполнения связано с выделением памяти и созданием объекта, я полагаю, что использование другого метода расщепления, такого как JSON, здесь не поможет.
Я знаю, что в некоторых интерпретируемых языках есть способ сохранить весь образ своей памяти в виде файла диска, поэтому они могут загрузить его обратно в память за один раз, без выделения / создания для каждого объекта. Есть ли способ сделать это или добиться чего-то подобного в Python?