Я dill
автор.Вы можете попробовать klepto
для этого случая.dill
(фактически любой сериализатор) будет обрабатывать весь dict
как единый объект ... и что-то такого размера, вы можете захотеть рассматривать больше как базу данных записей ... что может сделать klepto
,Наиболее быстрый подход, вероятно, заключается в использовании архива, который обрабатывает каждую запись как отдельный файл в отдельном каталоге на диске:
>>> import klepto
>>> x = range(10000)
>>> d = dict(zip(x,x))
>>> a = klepto.archives.dir_archive('foo', d)
>>> a.dump()
В приведенном выше примере создается каталог с 10000
подкаталогами с одной записью в каждом.Ключи и значения хранятся.Обратите внимание, что вы также можете немного подправить метод сериализации, поэтому проверьте документы, чтобы узнать, как это сделать для своего пользовательского случая.
В качестве альтернативы, вы можете перебирать dict и сериализовать каждую запись с помощью dumpвнутри параллельной карты из multiprocess.Pool
.
(Примечание: я также являюсь автором multiprocess
и klepto
).
ОБНОВЛЕНИЕ: каквопрос был изменен с сериализации огромного диктата на сериализацию огромного списка маленьких диктов ... это меняет ответ.
klepto
создан для больших dict
-подобных структур, так что, вероятно,не то, что вы хотите.Возможно, вы захотите попробовать dask
, который построен для больших array
-подобных структур.
Я думаю, вы могли бы также выполнить итерацию по списку, сериализовав каждую из записей списка индивидуально ... и до тех пор, показагрузив их в том же порядке, вы сможете восстановить свои результаты.Вы могли бы сделать что-то вроде сохранения позиции со значением, чтобы вы могли восстановить список и затем отсортировать, если они вышли из строя.
Я бы также попросил вас подумать, если ваши результаты могут бытьперестроен, чтобы быть в лучшей форме ...