Hallo zusammen,
ich bin mir natürlich nicht sicher, das sich mit meinem Segment das Problem nachstellen lässt. Ich kann gerne den realen Code-Auszug posten, nur wird den niemand ohne das kommerzielle Programm nachvollziehen können. Daher dachte ich, ich vereinfache das Problem. Hier die originale Funktion aus dem Code:
Code: Alles auswählen
def write_results():
for i, nscalar in enumerate(nodescalars):
res = {} # dict {node-id : result}
for node in list(node_ids.keys()):
res[node] = t16file.node_scalar(node_ids_mentat[node], i)
# print(type(t16file.node_scalar(node_ids_mentat[node], i)))
if write_ascii:
ensfile.write_scalar_node_variable_time_step(nscalar,
res,t16file.increment,compnodes)
else:
ensfile.write_scalar_node_var_bina_time_step(nscalar,
res,t16file.increment,compnodes)
del res
gc.collect()
Folgende Variableninfo:
nodescalars: Eine Liste mit Strings
node_ids, node_ids_mentat: Dictionaries mit Knotennummern als Schlüsselwerte und Listen mit x,y,z-Koordinaten als Values
t16file: Instanz der Klasse "py_post", eine Python-Schnittstelle der kommerziellen FE-Software MSC.MARC
ensfile: Instanz einer selbst geschriebenen Klasse zur Ausgabe der Daten
Wenn ich den Kommentar vor print entferne um den Typ von "results" (in Wahrheit eben t16file.node_scalar(node_ids_mentat[node], i)) zu erfahren bekomme ich:
Der Gesamtcode hat 1000+ Zeilen. Falls weitere Segmente gebraucht werden einfach Bescheid sagen. tracemalloc sagt mir, dass die Zeile:
Code: Alles auswählen
res[node] = t16file.node_scalar(node_ids_mentat[node], i)
mit jedem Durchlauf der äußeren Schleife mehr Hauptspeicher allokiert.