Effizient ueber große Mengen von Objekten iteriere n
Michael Hierweck <[email protected]>
| Newsgroups | gmane.comp.web.zope.german |
|---|---|
| Message-ID | <[email protected]> |
Hallo allerseits, kann man in Plone 3.3.x effizienter über viele Objekte iterieren, als so: brains = catalog.searchResults([...]) for brain in brains: object = brain.getObject() [...] Bei mir führt das zu einer Zunahme des RAM-Bedarfs von 20-25 MB je 1000 Objekten und nach ca. 90.000 Objekten und dem Erreichen von rund 2 GB treten Fehler (syshook, leider wird kein Stacktrace ausgegeben) auf. Zumindest mein Code führt keine Operationen aus, bei denen Daten in jedem Iterationsschritt erfasst und in globalen Variablen abgelegt würde. Leider muss ich jedoch die Objekt mit "getObject()" aufwecken, da nicht alle benötigten Daten in den Brains stehen. Was ich schon mal probiert habe: a) Alle 1000 Objekte gc.collect() aufgerufen => kein spürbarer Effekt b) Alle 1000 Objekte transaction.abort() aufgerufen => reduziert den RAM-Bedarf anscheinend (wächst aber immer noch). Zumindest den Effekt von b) verstehe ich nicht, weil hier definitiv (von mir) keine Daten geschrieben werden. (Es handelt es um ein rein lesendes Datenexport-Skript.) Es sei denn Archetypes würde bei get"Field"() oder dem Verfolgen von Referenzen (relatedItems) Schreiboperationen ausführen... Danke für Tipps und auch Information zum besseren Verständnis. Ein schönes Wochenende wünscht Michael _______________________________________________ zope mailing list [email protected] https://mail.dzug.org/mailman/listinfo/zope