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 :

processus en conflit mémoire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par défaut processus en conflit mémoire
    Bonjour,

    Alors niveau environnement je suis sous : Débian et la machine c'est un raspberry B+.

    Mon script python se lance avec xinit ./programme.sh , il tourne en mode graphique grace à pygame.

    Jusqu'ici tout va bien,

    ce script lance deux threads python.

    Ensuite je veux qu'il lance un programme qui fonctionne sous X,
    Le script met donc les deux threards sous pause, puis je lance le programme avec os.system("programme2")

    Lorsque programme2 se termine ça plante mon serveur X avec un message d'erreur comme quoi on a violé sa mémoire. J'ai pas l'intitulé exact du message d'erreur.

    Par contre si je place une pause de 4 secondes juste après os.system("programme2"), bha là ça marche. Donc quelqu'un aurait une idée pour remplacé ma pause de 4 secondes par quelque chose de plus intéligent ? Merci

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Dans l'évolution de Python, il est plutôt recommandé d'utiliser subprocess.call au lieu d'os.system: à essayer! (voir la doc du module subprocess)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par killwin Voir le message
    Lorsque programme2 se termine ça plante mon serveur X avec un message d'erreur comme quoi on a violé sa mémoire. J'ai pas l'intitulé exact du message d'erreur.
    Dommage car si le serveur X n'est pas content, c'est que vous l'utilisez peut être de travers et qu'il n'y a rien à chercher côté programmation tant qu'on ne sait pas quelles sont les contraintes à respecter lorsque...
    La réponse a ce genre de question se trouve plutôt dans les forums Unix.

    Citation Envoyé par killwin Voir le message
    ce script lance deux threads python.

    Ensuite je veux qu'il lance un programme qui fonctionne sous X,
    Le script met donc les deux threards sous pause, puis je lance le programme avec os.system("programme2")

    Lorsque programme2 se termine ça plante mon serveur X
    Que se passe-t-il si vous lancez directement "program2" sans jongler avec les threads avant?
    note: Ici le but est d'essayer de simplifier pour essayer de mettre le doigt sur ce que le serveur X n'aime pas.

    Bon courage,

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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par défaut suite des événements
    Bonjour,

    Alors voici le message d'erreur :

    [xcb] Unknow request in queue while dequeuing
    [xcb] Most likely this is a multi-treading client ans XInitThreads has not been called

    J'ai remplacé os.system par subprocess.check_call et c'est vrai que c'est mieux avec un choix de paramètres intéressant et l'assurance que le processus appelé se termine pour éviter les zombies.

    Cependant ça ne m'a pas résolu le problème, qui survient une fois sur 7.

    J'ai essayé sans créer mes threads et là ça marche bien. J'ai oublié de le dire, mais au total j'a 3 threads, dont 2 que je mets sous pause et le troisième qui tourne tout le temps pour communiquer avec le programme que je lance.

    Cependant j'ai besoin de mes threads :-( merci ça avance petit à petit ...

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Que font ces threads côté GUI pour perturber le serveur X11?
    (utilisez vous une bibliothèque graphique particulière?)

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

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par killwin Voir le message
    Lorsque programme2 se termine ça plante mon serveur X avec un message d'erreur comme quoi on a violé sa mémoire.
    là on peut pas porté plainte contre X pour viol, c'est X la victime.

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Juste une idée:

    Je ne connais pas pygame, mais les bibliothèques graphiques que je connais ne sont pas "thread-safe". Cela veut dire que si on a dans le thread des actions directes sur le graphique (genre affichage dans un widget), ça plante. Le problème, c'est que ça peut marcher un certain temps ou certaines fois, mais quand ça plante, c'est méchant, et il n'est pas facile de savoir pourquoi: il n'y a pas de message d'erreur explicite parce qu'il n'est pas prévu de faire comme ça!

    A voir si c'est le cas dans la doc de pygame. Si c'est le cas, il faut trouver une autre manière pour les threads de piloter le graphique. Avec PyQt, le thread envoie des ordres au programme principal par des "signaux" et c'est le programme principal qui s'occupe du graphique.

Discussions similaires

  1. processus unix et mémoire
    Par pipip dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 23/11/2009, 01h28
  2. Le processus reste en mémoire
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2008, 14h03
  3. [Processus] Faire un Hash sur un programme en mémoire
    Par KiLVaiDeN dans le forum Windows
    Réponses: 2
    Dernier message: 23/11/2005, 18h40
  4. Processus Sql Server prend toute la mémoire vive
    Par cracosore dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 19/02/2004, 17h53
  5. Partage de blocs mémoire entre 2 processus
    Par rolkA dans le forum Windows
    Réponses: 6
    Dernier message: 18/11/2003, 19h08

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