Вы должны иметь возможность выгружать элемент по частям в файл. Два вопроса проектирования, которые необходимо решить:
- Как вы строите объект, когда помещаете его в память?
- Как вам нужны ваши данные, когда они выходят из памяти?
Если ваш процесс сборки одновременно заполняет весь массив, связанный с данным ключом, вы можете просто сбросить пару ключ: массив в файл в виде отдельного словаря:
big_hairy_dictionary['sample_key'] = pre_existing_array
marshal.dump({'sample_key':big_hairy_dictionary['sample_key']},'central_file')
Затем при обновлении каждый вызов marshal.load ('central_file') возвращает словарь, который вы можете использовать для обновления центрального словаря. Но на самом деле это будет полезно только в том случае, если, когда вам нужно вернуть данные, вы хотите обработать чтение «central_file» один раз для каждого ключа.
В качестве альтернативы, если вы заполняете элементы массива элементом в произвольном порядке, попробуйте:
big_hairy_dictionary['sample_key'].append(single_element)
marshal.dump(single_element,'marshaled_files/'+'sample_key')
Затем, когда вы загружаете его обратно, вам не обязательно собирать весь словарь, чтобы вернуть то, что вам нужно; вы просто вызываете marshal.load ('marshaled_files / sample_key'), пока он не возвращает None, и у вас есть все, что связано с ключом.