On Tue, 30 Mar 2010 12:19:58 +0200, Pietro Battiston <too...@email.it> wrote: > Salve a tutti, > > per quel che ne so, in python 2.5 e successivi il garbage collector > dovrebbe esistere e funzionare, giusto? > > Sapreste spiegarmi perché allora, se io faccio un import del seguente > semplice modulo: > > http://bazaar.launchpad.net/~tv-player-team/tv-player/GTK-release-0.3/annotate/head%3A/libradiotv/rai_XML.py > > e poi do "del rai_XML", python continua ad occupare 50 MB?
Prima del gc c'e' il ref count: devi avere 0 riferimenti al tuo modulo prima che abbia una chance di essere cancellato. Qualunque altro modulo lo importi aggiunge un riferimento. C'e' anche il riferimento in sys.modules come ti hanno gia' detto. Puoi sapere quanti sono i ref usando sys.getrefcount(rai_XML): minimo otterrai 3 (il nome rai_XML, il riferimento nella funzione sys.getrefcount e quello in sys.modules). Se ce ne sono di piu' allora il modulo non lo cavi via. Quello che vuoi fare non e' robusto perché un modulo non è esattamente un oggetto normale, nel senso che non sai il sistema come lo usa. Se vuoi davvero ripulire la memoria, cancella la struttura contenute dal modulo che occupa 50MB, non il modulo stesso. Un altro trucco per sapere se un oggetto viene davvero effettivamente cancellato è quello di usare un weakref per vedere se qualcun altro lo tiene ancora in vita. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python