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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.