[Python] Garbage collection

2010-03-30 Per discussione Pietro Battiston
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?

Peraltro, ho provato a giocare nel modulo stesso con del su più o meno
tutto, con gc.collect(2), gc.disable, gc.enable... ma senza esito. Ma se
in quel caso mi dico beh, vabbé, si vede che il modulo xml non supporta
la garbage collection (c'è un fondamento di verità in ciò o sono brocco
io?), non riesco a capire perché il semplice del del riferimento ad un
modulo non mi liberi la memoria... c'è qualche lista dei moduli caricati
o robe del genere?

grazie mille, ciao

Pietro

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Garbage collection

2010-03-30 Per discussione Marco Mariani
On 03/30/2010 12:19 PM, Pietro Battiston wrote:

 io?), non riesco a capire perché il semplice del del riferimento ad un
 modulo non mi liberi la memoria... c'è qualche lista dei moduli caricati
 o robe del genere?
   

Prova a toglierlo anche da sys.modules


-- 
This e-mail (and any attachment(s)) is strictly confidential and for use only 
by intended recipient(s). Any use, distribution, reproduction or disclosure by 
any other person is strictly prohibited. The content of this e-mail does not 
constitute a commitment by the Company except where provided for in a written 
agreement between this e-mail addressee and the Company. If you are not an 
intended recipient(s), please notify the sender promptly and destroy this 
message and its attachments without reading or saving it in any manner. Any non 
authorized use of the content of this message constitutes a violation of the 
obligation to abstain from learning of the correspondence among other subjects, 
except for more serious offence, and exposes the person responsible to the 
relevant consequences.

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Garbage collection

2010-03-30 Per discussione Daniele Varrazzo
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


Re: [Python] Garbage collection

2010-03-30 Per discussione Pietro Battiston
Il giorno mar, 30/03/2010 alle 13.04 +0200, Daniele Varrazzo ha
scritto: 
 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.

... e infatti sono 4... ma non c'è un metodo per sapere da quali oggetti
vengono i riferimenti?


 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.

Ho provato, ma senza successo...  la struttura che penso sia colpevole
(xmldoc, nel codice) ha effettivamente 93105 referenze... ma non ho
idea di chi siano i colpevoli (ho provato a fare del di tutto...).

 
 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.
 

Anche lì però non c'è modo di sapere _quale altro_ lo tiene in vita?

Per ora ho risolto facendo semplicemente un os.fork...

Pietro

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Documento programmazione ad oggetti python

2010-03-30 Per discussione Vittorio Zuccala'
Buongiorno,
da poco tempo mi sto avvicinando a python ed ho sempre avuto esperienze di
programmazione strutturata (bash, perl) e pochissimo ad oggetti.
Conoscete qualche documento online che spieghi la programmazione ad oggetti
(meglio se affrontata direttamente con python) ma in modo semplice?
Vi ringrazio anticipatamente.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Garbage collection

2010-03-30 Per discussione Daniele Varrazzo
On Tue, 30 Mar 2010 15:42:34 +0200, Pietro Battiston too...@email.it
wrote:
 Il giorno mar, 30/03/2010 alle 13.04 +0200, Daniele Varrazzo ha
 scritto: 
 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.
 
 ... e infatti sono 4... ma non c'è un metodo per sapere da quali oggetti
 vengono i riferimenti?

Non che io sappia.


 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.
 
 Ho provato, ma senza successo...  la struttura che penso sia colpevole
 (xmldoc, nel codice) ha effettivamente 93105 referenze... ma non ho
 idea di chi siano i colpevoli (ho provato a fare del di tutto...).

Forse la struttura parsata ha dei backlink dai nodi al parent o al root,
non conosco minidom.

Posso consigliarti questa ricetta:
http://code.activestate.com/recipes/523004/ con cui puoi trovare i
riferimenti ciclici in oggetti python. Per usarla, prima dai un
gc.collect(), poi print_cycles(gc.garbage) per avere un report di chi tiene
in vita chi (questo trova solo i riferimenti circolari, non i riferimenti
normali ad albero, quindi non risponde alla tua domanda di prima, ma magari
leggendo com'è fatta la ricetta trovi un modo per fare anche quello).

Comunque, aiuterebbe *non di poco* se quello che stai facendo lo facessi
in una funzione anziché in variabili di modulo. Se in una funzione crei
l'albero, con quello generi il report e restituisci solo il report, alla
fine della funzione l'albero deve essere distrutto: se non lo fa allora è
un bug di qualcuno (in quel caso forse sono i riferimenti circolari a
tenere in vita le strutture e puoi saperlo con la ricetta di sopra). Se fai
tutto a livello di modulo, non sei sicuro di cancellare tutti i riferimenti
(ad ad esempio probabilmente le variabili che usi per i loop lo stanno
tenendo in vita) quindi il bug è tuo e non si accettano lamentele :)


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Documento programmazione ad oggetti python

2010-03-30 Per discussione Valerio Turturici
Ciao,
questo penso sia un buon punto di partenza
http://homepage.mac.com/s_lott/books/oodesign.html ;)

Il giorno 30 marzo 2010 17.17, Vittorio Zuccala' vittorio.zucc...@gmail.com
 ha scritto:

 Buongiorno,
 da poco tempo mi sto avvicinando a python ed ho sempre avuto esperienze di
 programmazione strutturata (bash, perl) e pochissimo ad oggetti.
 Conoscete qualche documento online che spieghi la programmazione ad oggetti
 (meglio se affrontata direttamente con python) ma in modo semplice?
 Vi ringrazio anticipatamente.

 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Valerio Turturici

ADISOL - Associazione per la Divulgazione in Italia del
Software Opensource e Libero
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Documento programmazione ad oggetti python

2010-03-30 Per discussione Andrea Riciputi
Dive into Python (diveintopython.org) è un'ottima guida di introduzione a 
Python che ovviamente tratta anche la programmazione ad oggetti. Spero possa 
esserti utile.

Andrea

On 30 Mar 2010, at 17:17, Vittorio Zuccala' wrote:

 Buongiorno,
 da poco tempo mi sto avvicinando a python ed ho sempre avuto esperienze di 
 programmazione strutturata (bash, perl) e pochissimo ad oggetti.
 Conoscete qualche documento online che spieghi la programmazione ad oggetti 
 (meglio se affrontata direttamente con python) ma in modo semplice?
 Vi ringrazio anticipatamente.
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python