Gijs Molenaar wrote:
> Wie o wie, heeft er een idee?

Zonder naar je code te kijken, kan ik wel wat pointers geven:

- Globale mutable variabelen zijn vaak een bron van leaks; als je elke
   loop een item in een globale list stopt dan ruimt Python dat nooit op
   want er bestaat nog een referentie.

- Probeer het probleem in een testopstelling te recreƫren; daarna kun
   je door een binary search (helft van de code uitzetten) de leak te
   isoleren.

- Probeer circular references te vermijden; zelfs met GC support voor
   circular references kunnen objecten in het geheugen blijven. Als je
   toch circulaire referenties moet gebruiken, probeer dan weakrefs toe
   te passen (standaard library module 'weakref').

- Print reference counts en referents als je de problemen niet precies
   kan isoleren; sys.getrefcount laat je reference counts zien voor een
   gegeven object, en gc.get_referrers geeft je de objecten die refereren
   naar een gegeven object.

- Desnoods zet je de garbage collection debug traces aan met
   gc.set_debug.

Het is waar dat het Python memorymodel moeilijk gehuegen weer vrijgeeft 
aan het OS door fragmentatie, maar dat betekend nog niet dat je geheugen 
gebruik alleen maar groeit.

Martijn Pieters
_______________________________________________
Python-nl mailing list
Python-nl@python.org
http://mail.python.org/mailman/listinfo/python-nl

Antwoord per e-mail aan