cpickle Problem: Stack Overflow

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fililu
User
Beiträge: 3
Registriert: Mittwoch 29. Dezember 2010, 19:13

Hallo,

ich habe folgendes Problem:
In meinem Programm wird eine relativ komplexe Ansammlung von unterschiedlichen Objekten (mehr als 5000 in Listen usw., vielfach mit zyklischen Referenzen) anstandslos mit cpickle (Python 2.5.4) serialisiert. Füge ich nun eine gewisse Anzahl von Objekten (etwa 1000) hinzu, die auf bestehende Objekte referenzieren und von diesen auch referenziert werden, dann funktioniert die Serialisierung nicht mehr: MemoryError: Stack Overflow.
Das Verändern der max. Rekursionstiefe (2000) bleibt wirkungslos.
Verzichte ich auf Referenzen auf bestehende Objekte, gibt es kein Problem.

Wenn ich Python 2.7 verwende, funktioniert das Serialisieren auch nach der Veränderung ohne Probleme. Allerdings kann ich nicht umsteigen, da dann alle Oberflächen angepasst werden müssten. Der Aufwand würde in keinem Verhältnis stehen.

Vielleicht kann mir jemand helfen?

Mit freundlichen Grüßen
fililu
BlackJack

@fililu: Wie sieht es aus, wenn Du `pickle` statt `cpickle` verwendest?
fililu
User
Beiträge: 3
Registriert: Mittwoch 29. Dezember 2010, 19:13

Hallo BlackJack,

vielen Dank für den Tipp. Es scheint problemlos zu funktionieren.
Sind beide Module wirklich absolut kompatibel?

Viele Grüße
fililu
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

fililu hat geschrieben:Sind beide Module wirklich absolut kompatibel?
Wenn sie zueinander kompatibel wären würde es mit pickle auch nicht funktionieren. Die Unterschiede sollten im Detail in der Dokumentation erwähnt sein.
BlackJack

@DasIch: Kompatibel heisst doch nicht, dass sie die selbe Implementierung haben, sondern dass man die Daten zwischen beiden austauschen kann. Und das sollte gegeben sein.

@fililu: Ja die sind kompatibel.
fililu
User
Beiträge: 3
Registriert: Mittwoch 29. Dezember 2010, 19:13

Danke!
Antworten