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