ich hätte da eine Frage bzw. ein Problem bei dem Ihr mir vielleicht weiterhelfen könntet.
Ich generiere ein Dict mit sehr vielen Einträgen (ca 18mio, sys.getsizeof gibt mir für dieses Dict eine Größe von 805306648 bytes (768mb) an). Da dieses Dict dann auch nur wieder als Eingabe für ein Script dient (und es knapp 11 std. dauert diese Daten zu generieren) möchte ich dieses nun "dumpen".
Mein erster Ansatz war das ganze zu pickeln (mit cPickle und protocol 2).
Leider läuft dies schon ewig und scheint zu keinem Ergebnis zu führen (i7 mit 12 GB Ram). Der pickle Vorgang läuft nun schon über 24 std und das bisher Erstellte pickle File ist knapp 200 mb groß.
Das gleiche Ergebnis bekomme ich wenn ich das ganze als Liste erstelle bzw. direkt meinen Graphen (das is eigentlich das Ergebnis welches ich auf der Platte haben möchte. Der Graph ist allerdings dann auch wieder ein Dict. Dieser Graph soll dann als Eingabe für ein anderes Script dienen. D.h. ich muss das ganze auch wieder in den Speicher laden können mit pickle oder über shelve). Pickle scheint ein Problem mit den vielen Einträgen zu haben.
Mein zweiter Ansatz war das ganze mit shelve zu lösen. Das Ergebnis bisher ist leider das selbe. Er rattert und rattert, der Speicher läuft voll und es wird zwar ein File auf der Platte erstellt aber seeeeeeeeeehr langsam (ab einer bestimmten Größe 200kb pro stunde).
Ich weis nicht ob es etwas bringt wenn ich den Code poste. Anbei für das dict und shelve
Code: Alles auswählen
f = open('dict.cpickle','wb')
cPickle.dump(dict,f,protocol=2)
f.close()
Code: Alles auswählen
db = shelve.open('dict.db')
for key in dict:
db[key] = dict[key]
db.close()
Hat vielleicht jemand einen Tipp für mich bzw. Erfahrung mit ähnlichen Problemen.
Vielen Dank schon mal für eure Hilfe
Martin