p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre du Club
    Inscrit en
    juin 2006
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 106
    Points : 40
    Points
    40

    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
    -------------
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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"

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 604
    Points : 10 174
    Points
    10 174

    Par défaut

    Salut,

    J'ai copié votre exemple et je l'ai exécuté sur Python 2.7.
    La sortie est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Inscrit en
    juin 2006
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 106
    Points : 40
    Points
    40

    Par défaut

    Bonjour

    Tu utilises quelle version de traits?
    J'utilise la version 3.2.0 avec python 2.5

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 604
    Points : 10 174
    Points
    10 174

    Par défaut

    J'utilise la version 4.2.0.
    - W
    Architectures Post-Modernes

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. api win32 gui drawing fuite mémoire
    Par marud dans le forum Windows
    Réponses: 3
    Dernier message: 19/01/2007, 20h27
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo