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

Python Discussion :

problème de mémoire


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut problème de mémoire
    Bonjour,
    Je crée deux listes de liste de 50000x6 dans mon programme. Puis après je lis un fichier binaire d'une vingtaine de méga avec la fonction unpack de struct et à ce moment là j'ai un problème de mémoire.
    Est ce que je désalloue bien la mémoire lorsque je met liste=[] ou faut il utiliser une autre fonction (peut etre du genre del)?
    Est ce que unpack est déconseillé?

    J'espère que j'ai été à peu près clair.

    Bien cordialement,
    pouletator

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    essaie ca
    tu ne devrais plus avoir de ref a liste.

    ++

  3. #3
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par pouletator Voir le message
    Bonjour,
    Je crée deux listes de liste de 50000x6 dans mon programme. Puis après je lis un fichier binaire d'une vingtaine de méga avec la fonction unpack de struct et à ce moment là j'ai un problème de mémoire.
    Est ce que je désalloue bien la mémoire lorsque je met liste=[] ou faut il utiliser une autre fonction (peut etre du genre del)?
    Est ce que unpack est déconseillé?

    J'espère que j'ai été à peu près clair.

    Bien cordialement,
    pouletator
    Pourquoi tu crées deux listes? T'en sers-tu après? Est-ce que c'est nécessaire qu'elles soient allouées avant quand tu lises ton fichier?

    Plus d'informations aideraient à te diriger dans la bonne direction.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    liste=None
    Ok merci beaucoup, je vais tester ca.

    Pourquoi tu crées deux listes? T'en sers-tu après? Est-ce que c'est nécessaire qu'elles soient allouées avant quand tu lises ton fichier?
    J'ai besoin des deux listes dans le début du traitement. Elles n'ont pas les memes paramètres et c'est plus pratique de les distinguer. Il y en a une dont je me sers plus juste avant l'ouverture de mon fichier avec unpack. A celle là je met

    mais est ce suffisant pour désallouer toute la mémoire?

  5. #5
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Non, Python décide quand il n'a plus besoin d'une référence et la supprime à ce moment là. Encore une fois, je t'invite à donner plus de détails sur ton problème. Est-ce que des itérateurs à la place d'une liste feraient l'affaire?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Et donc le seul moyen de le faire décider qu'il n'a plus besoin de la référence est de mettre , c'est bien ca?

    Non je ne peux pas utiliser un itérateur car les éléments de la liste sont utilisés plusieurs fois.

    Ce que je fais, c'est que je crée une liste puis je crée une deuxième liste à partir de la première.
    Une fois ces deux listes créées, la première ne m'interesse plus et ca serait bien si je pouvais la supprimer. Ensuite, j'ouvre mon fichier avec unpack et je lance une boucle qui va lire plusieurs fois la seconde liste.
    Une fois ce premier traitement réalisé, je vais à nouveau relancer le programme en recréant les listes (pas avec les memes données).

    Je viens de voir le module garbage collector. Ne serait ce pas la solution?

  7. #7
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Non. Quand tu fais

    Tu changes seulement la référence que liste désigne, mais ta liste est probablement encore en mémoire.

    Si j'étais toi, je réviserais mes listes, car j'ai jamais rencontré de programme en Python qui ne pouvait s'exécuter parce que je manquais de mémoire.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ok, peut etre qu'il y a un problème au niveau de mes listes mais il doit bien quand meme y avoir une facon de supprimer des objets de la mémoire.

    dans tous les cas merci pour le temps que tu as pris pour m'aider.

    pouletator

  9. #9
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    La seule façon est de laisser le garbage collector s'en charger. Si t'as pas de références (genre quand tu fais liste = None), ton data va sûrement être ramassé au prochain cycle, mais c'est pas dit quand ça va arriver.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ok.
    Bon ca a quand meme planté avec en mettant "none", le garbage collector n'a pas dû le collecter assez tot (enfin si j'ai bien compris tes explications).


    Encore merci pour ton aide et ta patience.

    Bien cordialement,

    pouletator

  11. #11
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Si tu pouvais me montrer ton code, je pourrais sans doute te mettre sur une piste pour que ça fonctionne.

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    A la place de list=None, del liste est plus explicite.
    Normalement, la liste est supprimée dans la foulée s'il n'existe aucune référence sur elle, donc ton problème est autre part.

  13. #13
    Membre habitué Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 126
    Points
    126
    Par défaut
    Salut,

    Lorsque tu dis que c'est une liste de 50 000 x 6 c'est 50000x6 octects ou 300000 elements de type string ou autre ?

    Et lorsque tu dis que tu as un problème de mémoire, cela se traduit comment ?

    Et pour finir, tu as combien de Ram ?

Discussions similaires

  1. [WORD]Problème de mémoire
    Par Dnx dans le forum VBA Word
    Réponses: 17
    Dernier message: 05/10/2005, 14h48
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [Crystal Report]Problème de mémoire avec le moteur RDC
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/05/2005, 09h09
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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