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 :

Comment augmenter la mémoire vive allouée à Python?


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Comment augmenter la mémoire vive allouée à Python?
    Bonjour,

    Je suis en présence d'une application qui charge plus de 600 fichiers en mémoire et qui plante avant la fin avec un 'MemoryError'.
    Il semblerait que l'objet dans lequel est chargé toutes les données (par l'intermédiaire de dictionnaires) prend trop de place.
    Le chargement plante après une utilisation de RAM à hauteur de 1,8Go environ et ce, sur n'importe quelle machine.

    J'en déduis donc que la mémoire vive allouée à Pyhton est dépassée lors du chargement de tous ces fichiers.

    La question arrive donc : comment faire, depuis le code, pour augmenter la mémoire vive allouée à Python? (il parait que c'est possible en rajoutant une ligne comme en Java mais je ne sais pas laquelle).

    Merci d'avance car c'est un problème majeur!!!

    Bonne journée à vous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    tu es sur un os 32 ou 64 bits ?
    tu es sur Windows ou Linux ?
    tu es sur un Python 32 ou 64 bits ?
    tu as combien de ram sur la machine (au total) ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse rapide!

    OS 32
    Windows
    Python 32
    3.25Gb de RAM

    Mais si je teste le programme sous un autre PC plus puissant (10Gb RAM), le résultat est le même : après utilisation de 1.8Gb de RAM environ, ça plante

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    je pense que tu as atteint la limite de l'os (le max de Ram allouable pour un processus unique).

    il me semble que cette limite est de 2Go sur Windows 32bits.

    sur ton PC avec 10Go de Ram si tu es aussi sous Windows 32bits (ce qui serait une hérésie ) avec python 32 bits c'est normal que ça change rien.

  5. #5
    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,

    Je suis d'accord avec kango, par défaut, l'espace d'adressage des process sous windows 32bit est 2GB.

    Cependant, il est possible de booster la chose jusqu'à 3GB (google windows 3GB) et de mettre jusqu'à 32GB via le mode PAE (windows server only sans doute).

    Comment c'est possible?
    Il y a d'un côté les adresses virtuelles dont l'espace est limité par les 32 bits des registres correspondants. Puis les adresses physiques qui sont elles gouvernées par la taille du bus physique. Les deux ne sont pas "alignés" et d'ailleurs la plupart des processeurs 64 bits ne savent pas adresser la mémoire physique correspondante: pleins de pins sur le chip et pas grand monde peut s'offrir les TB de mémoire.

    Mais ce qui me turlupine le plus, c'est le design qui charge 600 fichiers en mémoire est-on vraiment obligé de...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    intéressant, merci Wiztricks.

    j'ai googlé car cela peut potentiellement m’intéresser (pour Windows XP 32 bits):

    http://dwf.blogs.com/beyond_the_pape...ows-vista.html

  7. #7
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour.

    Citation Envoyé par wiztricks Voir le message
    Mais ce qui me turlupine le plus, c'est le design qui charge 600 fichiers en mémoire est-on vraiment obligé de...
    +1

    A titre d'exemple, j'ai un projet pour taper des textes via un langage perso. qui gère les fichiers à mettre en forme ligne par ligne et non tout en bloc en stockant les infos dans un fichier via pickle, ceci pour être réutilisé plus tard par d'autres classes.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Ah je vais regarder ça alors mais bon le souci c'est que mes 600 fichiers sont chargés en mémoire (dans un objet) car ensuite, j'ai pleins de méthodes dans cet objet pour chercher des infos dans l'ensemble des fichiers etc etc....
    C'est pour ça que ça prend de la place!
    Vous me dites qu'il faudrait que le programme écrive tous les fichiers dans un seul fichier et qu'il aille chercher les infos dans le mega fichier ainsi créé au lieu de tous les charger en mémoire?

  9. #9
    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
    Citation Envoyé par syrius31 Voir le message
    Vous me dites qu'il faudrait que le programme écrive tous les fichiers dans un seul fichier et qu'il aille chercher les infos dans le mega fichier ainsi créé au lieu de tous les charger en mémoire?
    Ca fera un gros fichier qui ne sera pas plus gérable que les 600 fichiers précédents.
    La question porte sur le besoin de remonter toutes ces informations en mémoire plutôt que d'y accéder selon les besoins.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre confirmé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Points : 455
    Points
    455
    Billets dans le blog
    1
    Par défaut
    Dans ma jeunesse j'ai eu affaire à un cs comme celui-ci et ma solution avait été de créer une classe "Cache" qui me permet d'accéder à n'importe quelle données dans n'importe quel fichier.

    En fait quand je demande à accéder à une donnée, le fichier (ou seulement un bout) est chargé dans un buffer en mémoire puis conservé (pour un éventuel autre accès).

    La classe Cache contient un ensemble de buffers en mémoire qui contiennent les fichiers qui ont été chargés au fur et à mesure des besoins.
    Quand cet ensemble atteint sa limite (fixée par moi en fonction de la place disponible) il libère le buffer qui a le moins servi (ou depuis le plus longtemps) pour pouvoir charger un nouveau fichier.

    C'est une technique vieille comme le monde et qui est toujours utilisée par tous les OS pour gérer la mémoire virtuelle.

    Aujourd'hui, on a rarement besoin de ça car les PC ont beaucoup de mémoire, mais dans un cas comme ceui-ci, si tu ne veux/peux pas changer le design de ton appli, ça peut servir de déterrer des vieilles recettes...

    Hadrien
    Captain'Flam
    anciennement Sopsag, aka Hadrien
    Win seven x64 & Win 10 / Visual 2017 / Python 2.7 / Eclipse

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Ah pas bête ça mais le truc, c'est que j'ai besoin en permanence des infos des 600 fichiers. ça peut quand meme marcher dans une classe Cache?
    et je peux la trouver où cette classe?

  12. #12
    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
    Citation Envoyé par syrius31 Voir le message
    Ah pas bête ça mais le truc, c'est que j'ai besoin en permanence des infos des 600 fichiers. ça peut quand meme marcher dans une classe Cache?
    Vous ne pouvez traiter, utiliser qu'une quantité d'information limité par la vitesse d'exécution de votre code... Le "en permanence" est donc très relatif et c'est ce très relatif qu'exploite le "cache".
    Cette classe n'existe pas, il vous faut la coder vous même.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Si l'idée est séduisante, j'avoue que je ne sais pas du tout comment m'y prendre.... Actuellement, j'ai un objet Data (par exemple) qui a des attributs self.data (dictionnaire par exemple) et des méthodes loadFiles(), getValue(), setValue(), etc etc... bref... un objet quoi...
    La méthode loadFiles() charge tous les fichiers (les 600 fichiers) et écrit les données dans le dictionnaire self.data (par exemple). Une fois le chargement des fichiers effectué, j'ai besoin des données dans les autres classes et corp du programme. Je vais faire plein de vérif dans la cohérence des fichiers etc etc... j'ai donc besoin d'avoir l'objet Data "sous la main" en permanence (le voilà le mot permanence lol).
    Le souci, c'est que je n'arrive pas à terminer le chargement des fichiers (la méthode loadFiles() plante avant la fin du fait qu'il y a trop de donnée à charger en mémoire).
    Bref, je ne sais pas par où commencer sachant que c'est une grosse appli et que je peux pas tout retoucher...

  14. #14
    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,

    Introduire un cache impose un minimum de "structuration" permettant de construire une relation entre un objet accédé en mémoire par le programme et le déclenchement ou pas d'une lecture du ou des fichiers correspondant.
    C'est "grâce à la gestion de ce mapping" (le cache) qu'on va pouvoir rendre "transparente" la mécanique.

    Si c'est un tel "gros tas" côte prog. et que la construction de cette relation est "impossible", pas d'autre solution qu'augmenter l'espace d'adressage...

    Mais, le machin ne sera pas viable:
    - les temps de lancements seront "croissants",
    - s'il y a fichier c'est que les données sont "sauvegardées" de temps en temps, çà risque de devenir pénible dans le temps.
    Donc tôt ou tard, il faudra revoir la copie.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Aie aie aie, je suis bien embeté... je pourrais vous mettre le code pour que vous voyez mais bon je sais pas si ça vous avancerait...

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Je vous mets le code à disposition.
    Je précise que c'est que le module de chargement de l'application.
    la partie "utilisation des données chargées" n'est pas présente.

    Un fichier README explique comment ça marche, c'est tout simple, j'ai tout simplifié et l'erreur est reproduite.

    Vous pouvez le mettre sur Eclipse pour vous servir du débogage si vous voulez aussi.

    Merci de me tenir au courant.

    ça serait super génial si le problème pouvait être résolu.

    Merci à vous.
    Fichiers attachés Fichiers attachés

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 396
    Points
    396
    Par défaut
    Je vais peut être dire une bêtise, mais pourquoi ne pas utiliser une base de données ?

    Monter dans une base les éléments nécessaires venant des 600 fichiers et les traiter avec des requêtes SQL me semble raisonnable. Est ce faisable ? Si oui, alors se servir de 2 PC pour cela (1 pour la base et 1 pour le traitement) pourquoi pas ?

  18. #18
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    sans être rentré dans le détail des fichiers, la base de donnée semble être adaptée (mais pourquoi forcément 2 PC ?) pour traiter de gros volumes de données non représentables en mémoire.

  19. #19
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 396
    Points
    396
    Par défaut
    Effectivement un seul PC peut suffire, mais si le volume est gros la base peut l'être elle aussi. Je ne connais pas l'importance des données(600 fichiers = x mo), donc pas l'occupation de la base en mémoire.

  20. #20
    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,
    Python vient avec SQLite et ce dernier peut gérer jusqu'à 10Go de données sans trop de soucis. Reste que le boulot à faire pour intégrer cela à l'existant n'est peut être pas si simple.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/04/2014, 14h59
  2. Comment augmenter la mémoire dispo pour WORD
    Par gronaze dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2009, 07h13
  3. Réponses: 4
    Dernier message: 11/07/2008, 10h37
  4. Comment liberer la mémoire vive svp ?
    Par arnofly dans le forum Windows Forms
    Réponses: 21
    Dernier message: 22/08/2007, 22h23

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