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 :

Windows7x64 : garder de la ram pour Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut Windows7x64 : garder de la ram pour Python
    Bonjour,

    J'ai un script python (en exe avec py2exe) qui tourne en permanence sur des machines. Tout marche très bien, sauf quand on lance une autre appli qui prend toute la ram disponible. A ce moment là, mon exe python a moins de ram, genre de 20Mo il passe à 4Mo. Et là certaines fonctions marchent toujours, mon exe tourne donc, mais d'autres fonctions, notamment écouter sur un port tcp pour recevoir des commandes (avec zmq), ne marche plus.

    Alors peut-on réserver de la ram ? Ou empêcher windows de bouffer la ram de mon exe python ?

    Le tout en win7x64, python 2.7 x64

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,
    Et là certaines fonctions marchent toujours, mon exe tourne donc, mais d'autres fonctions, notamment écouter sur un port tcp pour recevoir des commandes (avec zmq), ne marche plus.
    La lenteur devrait faire péter des timers. Si c'est "autre chose", il y a peut être un autre problème (et un autre diagnostic à faire).

    Alors peut-on réserver de la ram ? Ou empêcher windows de bouffer la ram de mon exe python ?
    RAM, CPU, ... sont des ressources gérées par Windows.
    Par défaut, une application (Python ou pas) laisse faire l'OS.
    Pour changer ce défaut, il faut trouver comment raconter cela à l'OS (ce sont des appels systèmes).
    Attention à la petite notice concernant JOB_OBJECT_LIMIT_WORKINGSET.

    Puis appeler cela depuis Python via ctypes ou win32 is just SMOP.
    Désolé mais lire la doc, trouver comment tester que le code "fonctionne", puis coder, tester,... prend beaucoup plus de temps que de faire un plan de route. Peut être que d'autres ont ce genre de code dans un coin et seront ravis de le partager.

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

  3. #3
    Membre averti
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut
    Merci !!!! J'entrevois au moins une solution avec SetProcessWorkingSetSizeEx , je vais essayer çà !
    Je vous tiens au courant, mais en attendant si qqlun a déjà bossé là dessus çà m’intéresse

  4. #4
    Membre averti
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut
    J'ai çà qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import win32process
     
    hdl = win32process.GetCurrentProcess()
    minSize, maxSize = win32process.GetProcessWorkingSetSize(hdl)
    print minSize, maxSize 
     
    win32process.SetProcessWorkingSetSize(hdl, 1413120, 1413120)
    minSize, maxSize = win32process.GetProcessWorkingSetSize(hdl)
    print minSize, maxSize
    reste à comprendre quelles valeurs mettre (14Mo ??) et verifier si çà change quelques chose lol

  5. #5
    Membre averti
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut
    bon en gros :
    SetProcessWorkingSetSizeEx is only available in Vista and higher.
    SetProcessWorkingSetSize doesn't establish a hard limit on the working set.

    Donc la soluce au dessus ne marche pas, j'ai testé et la ram descend en dessous du min ...

    Je vais essayer en appellant la fonction dans kernel32.dll ... :/

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    (re-)Read the fine print que j'ai écrit: "Attention à la petite notice concernant JOB_OBJECT_LIMIT_WORKINGSET", elle explique ce que vous constatez.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. y a-t-il un support de types génériques pour python ?
    Par silverhawk.os dans le forum Général Python
    Réponses: 15
    Dernier message: 24/03/2006, 18h23
  2. Réponses: 16
    Dernier message: 01/02/2006, 22h05
  3. Librairie 7z Pour Python
    Par kedare dans le forum Général Python
    Réponses: 2
    Dernier message: 19/12/2005, 15h49
  4. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 14h51

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