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 :

communication entre processus


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut communication entre processus
    bonjour,

    mon programme principal Princ.py lance un processus indépendant.
    le processus indépendant écrit dans son stdout
    le problème se produit lorsque via un timer, j'essais de lire toute les secondes le stdout du processus indépendant.
    mon programme principal se bloque.
    le processus indépendant fonctionne normalement.

    code du programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    global p
    p = subprocess.Popen(mes_args, stdout=subprocess.PIPE)
    .........
    self.timer2.Start(1000)
    .........
    def OnTimer(self,evt):
          global p
          if p.poll() == None:
            print p.stdout.read()
          else:
            self.timer2.Stop()
    code du process indépendant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sys.stdout.write("mon message bla bla\n")
    par avance merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    le processus lancé avec Popen ne peut-il communiquer avec son parent ?
    ou Popen ne sert-il qu'à lancer un programme indépendant ?

    merci pour vos réponses

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    faute de solutions "propres" je pense que je vais me rabattre vers une communication au travers d'un simple fichier.
    le parcours de sites anglophones révèle le problème d'un blocage de processus lors de la lecture de stdout ou stderr avec Popen() sans y apporter de solutions...je continue ma recherche car je ne peux pas me faire à l'idée qu'un langage comme python ne puisse pas faire communiquer proprement des processus entre eux ...

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    le blocage provient de la lecture du stdout du process enfant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    msg = p.stdout.read()
    ....

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    le processus enfant ne peut transmettre le contenu de son stdout que lorsqu'il se termine (exit())
    Le processus parent lit le stdout du processus enfant via communicate.
    je recherche une solution pour que le processus parent accède au stdout du processus enfant avant que ce dernier ne se termine.
    en gros je recherche à obtenir les infos du processus enfant au fil de l'eau durant son exécution

    par avance merci

  6. #6
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Je ne suis pas expert en python (ni en processus d'ailleur) loins de là mais l'utilisation de thread ne te faciliterait-elle pas la vie?

    amicallement, sloshy

  7. #7
    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
    Et avec communicate ?

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    j'ai essayé avec communicate mais cette méthode attend la fin du processus enfant ce qui signifie que le programme principal est bloqué.
    Ce blocage limite grandement l'intérêt des processus fils car le processus père ne peut plus vivre sa propre vie ...
    les threads fonctionnent sans problème mais sont limités à des appels de fonctions et non à des applications autonomes.
    Je suis en train de tester un solution mixte en lançant le processus fils avec Popen (subprocess) et en faisant communiquer les processus enfant et parent via un simple fichier.

    merci pour vos suggestions

  9. #9
    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
    Il y a aussi bufsize que tu peux régler à 0 pour ne pas avoir de tampon intermédiaire.

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    je vais tester le bufsize
    merci

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    la doc indique que par défaut le bufsize de Popen est égal à zéro et communicate renvoie les données à la fin du process enfant.
    j'espère que je n'aurai pas passer par les sockets pour faire communiquer deux processus qui s'exécutent sur la même machine !?.....

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    j'ai utilisé un simple fichier que le processus père lit périodiquement.
    la solution n'est pas très propre mais ça fonctionne

    merci pour votre aide

  13. #13
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    merci pour votre aide
    Surtout felicitations à toi de chercher activement par toi même.
    Si tous les utilisateurs du forum faisaient comme toi.... ce serait le bonheur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre processus
    Par annemarie dans le forum Windows
    Réponses: 3
    Dernier message: 11/05/2009, 15h47
  2. [C#]Communication entre processus
    Par ShamSS dans le forum C#
    Réponses: 5
    Dernier message: 28/02/2009, 19h39
  3. [VB.Net][Threading] Communication entre processus
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2006, 15h15
  4. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  5. Communication entre processus
    Par markopolo dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/06/2003, 16h21

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