IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Tkinter et memoire vive eviter le leak


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Tkinter et memoire vive eviter le leak
    Salut

    Voila j ai creer un viewer de pdf avec defilement de valeur en temps reel issue d une base sql ip21

    Le programme tourne en continu 24/24 7/7

    Je remarque la memoire vive utiliser par pythonw croit de jours en jours c est pas enorme mais la en 2 jours je passe de 93mo a 170mo

    J ai lu que l itemconfigure que je me sert pour cree le defilement de texte genere cette augmentation de memoire sous python 2.7 donc de temps en temps je delete ALL et je recree les create_text

    J ai 3 grids avec after x seconds qui tournent

    Y a t il une chose a faire ou ne pas faire pour empecher cette monte de consommation de memoire

    Genre de temps en temps arreter after et relancer simplement

    Merci de vos conseilles

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Sous quel OS et avec quels outils avez vous mesuré la mémoire occupée?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Windows avec taskmgr

    J ai remarque ca puisqu au bout de 7 jours j ai mon defilement de texte qui a ralenti et j ai meme eu une erreur plus de memoire pour gswin32c.exe qui transforme mes pdf en jpg dans un thread lance completement a part dans un subprocess.popen d ailleurs ce thread sur 7 jours ne bouge pas de 20 mo

    Le probleme est vraiment dans le mainloop de tkinter

    J ai bien regarde que mes listes ce vide bien je del meme des listes avant de les mettres a jours avec les nouveaux pdf

    Mais rien ca augmente toujours

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si la mémoire utilisée augmente, c'est qu'à priori vous oubliez (involontairement) de la libérer ou qu'il y a un bug dans les bibliothèques que vous utilisez. Si on veut faire cela de façon scolaire, on dumpe les différents objets contenus dans la mémoire Python puis on fait des hypothèses sur la cause en fonction de ce qu'on trouve, et on essaie de comprendre pourquoi le code "oublie" de... On corrige, on re-teste...
    On peut aussi apprendre à mieux programmer - mais on n'a pas le temps.
    On peut être délibérément "sale", i.e. redémarrer le process tous les X traitements histoire de libérer la mémoire.
    note: réciproquement, si vous ne voulez pas devoir redémarrer le programme tous les X, il faut être plus balaise côté qualité du code, tests, instrumentations.... i.e. pour une ligne de code de l'application, vous en avez 5 fois plus dans les plans de tests et le design.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci w

    Comment dumpe les differents elements ? Pour commencer a controler tout ca

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il faut commencer par instrumenter avec le module "gc".
    Vous avez des indications sur comment çà fonctionne chez Doug Hellman.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    J ai regarde gc

    J ai donc ajoute dans une boucle de mon script

    Sachant que normalement le nombre de variable ne varie pas

    Je charge toujours le meme nombre de variable donc le nombre devrait etre constant

    Je scan les pdf dans un dossier je l ai affiche puis au dernier pdf je recharge la meme liste de pdf et je recommence


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n=gc.collect()
    print n
    Je commence

    341
    454
    854
    1544
    1162
    522
    1193


    Y a un moyen d avoir cette liste de variables

    Merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    gc.get_objects()?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2003
    Messages : 12
    Points : 22
    Points
    22
    Par défaut
    Y'a cette vidéo de Victor Stinner qui peut peut être s'avérer utile.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci pour la video

    Je pense que mon probleme est lie a un cycle de reference

    J ai mon gui qui tourne puis a un certain moment je met a jour une liste qui servira a un itemconfigure

    La mise a jour a lieux dans un thread

    Mais pour la mise a jour je fait

    a=b

    Ou a liste dans le gui et b liste dans le thread

    A mon avis cela cree un cycle de reference

    Si je remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    b=[]
    for i in a :
     b.append(i)
    Donc a chaque mise a jour du gui je vais lancer ceci

    Cela va t il eviter un cycle de reference

    Merci

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Comment "A = B", i.e la création d'une variable à laquelle on assigne une liste existante pourrait introduire un cycle?
    note: s'il n'y a pas de cycle à défaire, pas la peine de regarder la solution à un no-problem.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Lire la mémoire vive avec WinDev
    Par ritchi46 dans le forum WinDev
    Réponses: 5
    Dernier message: 24/08/2006, 01h04
  2. Quantité de mémoire vive
    Par foblar dans le forum Administration système
    Réponses: 7
    Dernier message: 13/08/2006, 13h49
  3. Memoir Vive et SQL Server
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/06/2006, 12h09
  4. [DELL]Memoire vive bridée ?
    Par Phenomenium dans le forum Composants
    Réponses: 9
    Dernier message: 25/04/2006, 11h10
  5. [Système] Quantité de memoire vive?
    Par bibiloute dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 29/03/2005, 19h01

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