Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Nouveau Membre du Club
    Inscrit en
    juin 2006
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 106
    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
    -------------
    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"

  2. #2
    Expert Confirmé Sénior
    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 4 748
    Points : 7 160
    Points
    7 160

    Par défaut

    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

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

    Par défaut

    Bonjour

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

  4. #4
    Expert Confirmé Sénior
    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 4 748
    Points : 7 160
    Points
    7 160

    Par défaut

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •