[Python] Tussentijdse files uit geheugen verwijderen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Fugitive2008
  • Registratie: Augustus 2007
  • Laatst online: 02-10 15:33
Mijn vraag
Ik heb een python script wat we binnen spaceclaim kunnen runnen om een aantal bewerkingen uit te voeren op een redelijk complexe CAD geometrie. Dit herhalen we ongeveer 10000keer vandaar dat we een script gebruiken om de bewerkingen uit te voeren.
Het script werkt als volgt:
1. laden we de basis geometrie in
2. Slaan het op als een temp file om de bewerkingen uit te voeren. (steeds opnieuw inladen van de originele geometrie werkt niet dan blijft hij de vorige bewerkingen onthouden)
3. voeren de bewerkingen uit
4. slaan wat meetdata op (m^3 aan volume en zwaartepunt)
5. Deleten de temporary file
6. Beginnen overnieuw en stapje verder in de loop.

Probleem
Het probleem is dat 'interm_model_file' wel wordt verwijderd in de werkfolder maar ik denk niet uit het geheugen en dit dus het geheugen laat vol lopen, uiteindelijk kunnen we daardoor ongeveer maar 100-130 keer dit script doorlopen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
for ii in xrange(ArmH_range):
        ArmH = (ArmH_start + ArmH_int*ii)*1e-3
        ArmH_deg = ArmH * 180/math.pi
        
       
        for jj in xrange(TrimH_range):
            TrimH = (TrimH_start + TrimH_int*jj)*1e-3
            TrimH_deg = TrimH * 180/math.pi
            
            
            for kk in xrange(Wniveau_range):
                Wniveau =  Wniveau_start + Wniveau_int*kk
                count = count+1
            
                #Lees uitgangsmodel
                importOptions = ImportOptions.Create()
                DocumentOpen.Execute(dir + model_file +  ".scdoc", importOptions)
                 # EndBlock
            
                #Save model in intermediate file
                options = ExportOptions.Create()
                DocumentSave.Execute(dir + interm_model_file + str(count) +  ".scdoc", options)


                [i]BeWeRkInGeN[/i]

                # Objecten verwijderen
                DocumentHelper.CloseDocument()
                              
                # EndBlock
                filePath = dir + interm_model_file + str(count) +  ".scdoc"
                try:
                    os.remove(filePath)
                except:
                    print("Error while deleting file ", filePath)
                gc.collect()


Relevante software en hardware die ik gebruik
Spaceclaim 2021R1
Windows 10


Wat ik al gevonden of geprobeerd heb
Support van onze software in Nederland kon het zo 1 2 3 niet oplossen. Verder op internet gezocht om geheugen te clearen etc.

Alle reacties


Acties:
  • +1 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Debuggen, gedeeltes van je code weghalen om het probleem te lokaliseren. (stresstest of het gebeurt bij: vaak het sjabloon openen, vaak het document opslaan, sluiten, berekeningen uitvoeren, meta data opslaan.

Zou sowieso zware code in aparte processen stoppen. Nu is je 100k loop in dezelfde code als je functie, misschien werkt de garbage collection dan niet zo goed?

Heb geen ervaring met python maar het lijkt me ook niet efficiënt om elke keer opnieuw het sjabloon in te laden, zou die 1x kunnen laden en clonen bij elke volgende iteratie? Grote kans dat die spaceclaim library niet zo goed omgaat met al die bestanden, geen idee of daar nog functionaliteit in zit om je geheugen vrij te maken.

Acties:
  • +1 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
misschien is het ook wel een hack als je de count uit de filenaam haalt, je verwijdert de bestanden toch, dan kan je ze net zo goed overschrijven, misschien doet het wat met het geheugen (zelfde cache slot bijv?).

Acties:
  • +1 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Dit:
Slaan het op als een temp file om de bewerkingen uit te voeren. (steeds opnieuw inladen van de originele geometrie werkt niet dan blijft hij de vorige bewerkingen onthouden)
in combinatie met dit:
'interm_model_file' wel wordt verwijderd in de werkfolder maar ik denk niet uit het geheugen
Doet mij sterk vermoeden dat dit geen Python-probleem maar een Ansys SpaceClaim-probleem is. Blijkbaar blijft een deel van de data ingeladen: dat zorgt dan zowel voor het geheugenlek als voor het vreemde gedrag bij het opnieuw inladen van de originele file.

De SpaceClaim-API is niet vrij beschikbaar (zie http://help.spaceclaim.co...ontent/SpaceClaim_API.htm) wat het erg lastig maakt om hier zinnige feedback te geven. Het lijkt er bovendien sterk op dat er gebruik wordt gemaakt van een .NET API, en je Python-code onder IronPython draait -- dat maakt het allemaal een stuk complexer. Je beste optie is m.i. om contact op te nemen met de support van Ansys; je baas betaalt ze niet voor niets bakken met geld ;-)

Acties:
  • +1 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 00:50

The Eagle

I wear my sunglasses at night

Van wat ik zo snel zie aan die code zit een file close in de loop. Ken de code verder niet maar vraag me af of ie daar goed zit en f de juiste syntax gebruikt wordt voor alle files.

Verder: spaceclaim is volgens Wikipedia gebaseerd op Wikipedia: ACIS en da's c++. Daar kan dus ook nog wat mis gaan.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)