Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Bibliothèques tierces
Bibliothèques tierces Forum d'entraide pour les autres bibliothèques non présentes dans la distribution standard de Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/06/2012, 11h36   #1
st20085
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 105
Points : 36
Points : 36
Par défaut fuite mémoire API traits

Bonjour

Ayant récupéré un gros projet en Python utilisant l'API Traits, PyQT, etc..., nous avons beaucoup de fuite mémoire et il me semble que la plupart vienne de cet API Traits.

Voici un exemple que j'ai pris d'un tutoriel auquel j'ai voulu supprimer certaines références mais on dirait que j'ai encore des références sur l'objet d'instance Child car à la sortie de mon code j'ai
Citation:
-------------
joe refcount 3
moe refcount 3
reset_traits
joe refcount 2
moe refcount 3
-------------
joe is None
<__main__.Child object at 0x014B15D0> 3

Je voudrais savoir si quelqu'un sait comment enlever toutes les références sur mon instance de Child.
Merci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
from enthought.traits.api import Delegate, HasTraits, Instance, Int, Str
 
class Parent(HasTraits):
 
    # INITIALIZATION: last_name' is initialized to '':
    last_name = Str('')
 
 
class Child(HasTraits):
    age = Int
 
    # VALIDATION: 'father' must be a Parent instance:
    father = Instance(Parent)
 
    # DELEGATION: 'last_name' is delegated to father's 'last_name':
    last_name = Delegate('father')
 
    # NOTIFICATION: This method is called when 'age' changes:
    def _age_changed(self, old, new):
        print 'Age changed from %s to %s ' % (old, new)
 
# Set up the example:
joe = Parent()
moe = Child()
moe.father = joe
 
print "-------------"
 
import sys
import weakref
 
# create reference faible
joeRef = weakref.ref(joe)
moeRef = weakref.ref(moe)
 
# nbre reference
print "joe refcount", sys.getrefcount(joe)
print "moe refcount", sys.getrefcount(moe)
 
#
print "reset_traits"
joe.reset_traits()
moe.reset_traits()
 
# nbre reference
print "joe refcount", sys.getrefcount(joe)
print "moe refcount", sys.getrefcount(moe)
 
joe = None
moe = None
 
print "-------------"
 
# récupére l'objet à partir de la référence
joe = joeRef()
if joe:
    print joe, sys.getrefcount(joe)
else:
    print "joe is None"
# récupére l'objet à partir de la référence
moe = moeRef()
if moe:
    print moe, sys.getrefcount(moe)
else:
    print "moe is None"
st20085 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2012, 13h55   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 688
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 688
Points : 4 516
Points : 4 516
Salut,

J'ai copié votre exemple et je l'ai exécuté sur Python 2.7.
La sortie est:
Code :
1
2
3
4
5
6
7
8
9
-------------
joe refcount 3
moe refcount 2
reset_traits
joe refcount 2
moe refcount 2
-------------
joe is None
moe is None
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2012, 15h22   #3
st20085
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 105
Points : 36
Points : 36
Bonjour

Tu utilises quelle version de traits?
J'utilise la version 3.2.0 avec python 2.5
st20085 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2012, 15h26   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 688
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 688
Points : 4 516
Points : 4 516
J'utilise la version 4.2.0.
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h51.


 
 
 
 
Partenaires

Hébergement Web