Я пытаюсь запустить кучу симуляций (системы питания) и сохранить все результаты в словарях.Вот организация данных:
Поскольку у меня не такая сложная структура объектов, я решил использовать укроп для хранения словаря, который содержит набор словарей (каждый из ключей которых содержит класс)
import dill as pickle
class Results():
def __init__(self):
self.volt = []
self.angle = []
self.freq = []
def save_obj(obj, name ):
# save as pickle object
currentdir = os.getcwd()
objDir = currentdir + '/obj'
if not os.path.isdir(objDir):
os.mkdir(objDir)
with open(objDir+ '/' + name + '.pkl', 'wb') as f:
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL,recurse = 'True')
EventDict = {}
########### conceptual code to get all the data
# simList is a list of approximately 7200 events
for event in simList:
ResultsDict = {}
for element in network: # 24 elements in network (23 buses,or nodes, and time)
# code to get voltage, angle and frequency (each of which is a list of 1200 elements)
if element == 'time':
ResultsDict['time'] = element
else:
ResultsDict[element] = Results()
ResultsDict[element].volt = element.volt
ResultsDict[element].angle = element.angle
ResultsDict[element].freq = element.freq
EventDict[event] = ResultsDict
save_obj(EventDict,'EventData')
Результирующий объект pickle походит на 5 гигабайт, и когда я пытаюсь загрузить, я получаю следующую ошибку, говорящую, что ему не хватило памяти:получить эту трассировку.Я понимаю, что эта проблема, потому что EventDict огромен.Итак, я думаю, что я спрашиваю, есть ли лучший способ хранить такие данные временного ряда, с некоторой функциональностью маркировки каждого данных ключом, чтобы я знал, что это представляет?Я открыт для предложений, отличных от pickle, поскольку он быстр при загрузке и не требует слишком больших усилий при загрузке в python.