Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Vrijgeven geheugen Python

Pagina: 1
Acties:

  • T i M
  • Registratie: April 2004
  • Laatst online: 20-11 09:18
Ben op het moment bezig om iets te maken in Python, maar loop vast op het geheugengebruik. Vanuit een XX aantal files van ongeveer 90MB per stuk creeer ik een array data. Na het inlezen staat het geheugengebruik om ongeveer 4GB, wat gezien het type data reeel is. Na het inlezen van de data worden er bewerkingen op gedaan en kan het geheugen vrijgegeven worden.

Dat laatste is echter niet het geval. Dat is een probleem want dat geheugen heb ik verderop in het programma hard nodig, waardoor het OS gaat swappen en de performance naar een dieptepunt zakt.

Als ik een test maak, waarin ik een list vul met een aantal MB aan data en vervolgens diezelfde list op Null zet of opnieuw initialiseer als lege list wordt het geheugen niet vrijgegeven.

Nu zijn er functies om handmatig de garbage collector te laten runnen, maar die geven niet het gewenste resultaat.

Iemand die hier ervaring meer heeft en kan uitleggen waarom dit gebeurt?

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Waarschijnlijk is er dan nog ergens anders in je applicatie een referentie naar de objecten. Misschien als je de code van je test post dat er is zinnigers is te zeggen.

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 21-11 19:24

Kwastie

Awesomeness

http://docs.python.org/2/library/gc.html al eens bekeken? (methode: gc.collect() ) deze methodes zouden de objecten moeten free-en (tenzij er ergens nog een referentie is)

[ Voor 35% gewijzigd door Kwastie op 25-01-2013 13:05 ]

When I get sad i stop being sad and be awesome instead


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23-11 03:08
Hoe constateer je precies dat het geheugen niet vrijgegeven wordt? Het kan zijn dat de garbagecollector de objecten wel gecollect heeft, maar het geheugen (nog) niet heeft teruggegeven aan het besturingssysteem.

Los hiervan: als je data bestaat uit grote (homogene) arrays, is het aan te raden om gebruik te maken van numpy arrays, zodat je minder overhead hebt dan met standaard (heterogene) Python lists.

  • joram.agten
  • Registratie: Oktober 2010
  • Laatst online: 19-11 15:43
Je kan ook de file(s) ook met een memory map opendoen. dan heb je toegang tot alle data, maar moet je toch niet alles in het geheugen inlezen. Als je dan enkel pointers zou bijhouden naar de data, dan kan de virtual memory manager zelf bepalen hoeveel geheugen er gebruikt wordt.

http://docs.python.org/3.3/library/mmap.html