[Python] Garbage collection
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
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
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
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
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
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
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
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