Rekursives Objekt serialisieren
Verfasst: Samstag 27. Juni 2009, 13:22
Hallo,
ich habe eine Datenstruktur, die ein wenig einem Graphen ähnelt. Für die Darstellung in Python nutze ich der Lesbarkeit halber allerdings Knoten-Objekte und keine adjacency matrix. Der Graph ist ungerichtet, d.h. wenn Knoten A Nachbar von Knoten B ist, dann haben beide eine Referenz des anderen in ihrer Nachbarschaftsliste.
Das Problem tritt nun auf, wenn ich diese Struktur in ein Django-Sessionobjekt speichere. Zum einfacheren Debuggen habe ich versucht die Liste von Knoten zu pickeln (unter der Annahme, dass Django genau das tut). Dies gibt mir einen AssertionError und folgende Fehlermeldung sowie einen sehr tiefen traceback:
Kennt jemand zufällig dieses Problem und wie kann ich es lösen? Ich bin nicht unbedingt auf pickle angewiesen, d.h. ich kann auch andere Serialisier benutzen (und dann evtl. mit Django pickeln).
Ein kurzer Test mit yaml brachte leider keine Besserung (dump erstellen hat funktioniert, aber das dekodieren dauerte ewig, sodass ich eine Endlosschleife vermute).
Die Knoten-Struktur ändern möchte ich mir ersparen, wenn irgendwie möglich...
ich habe eine Datenstruktur, die ein wenig einem Graphen ähnelt. Für die Darstellung in Python nutze ich der Lesbarkeit halber allerdings Knoten-Objekte und keine adjacency matrix. Der Graph ist ungerichtet, d.h. wenn Knoten A Nachbar von Knoten B ist, dann haben beide eine Referenz des anderen in ihrer Nachbarschaftsliste.
Das Problem tritt nun auf, wenn ich diese Struktur in ein Django-Sessionobjekt speichere. Zum einfacheren Debuggen habe ich versucht die Liste von Knoten zu pickeln (unter der Annahme, dass Django genau das tut). Dies gibt mir einen AssertionError und folgende Fehlermeldung sowie einen sehr tiefen traceback:
Code: Alles auswählen
c:\Python26\lib\pickle.py in memoize, line 244
Ein kurzer Test mit yaml brachte leider keine Besserung (dump erstellen hat funktioniert, aber das dekodieren dauerte ewig, sodass ich eine Endlosschleife vermute).
Die Knoten-Struktur ändern möchte ich mir ersparen, wenn irgendwie möglich...