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 programmes?


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut Communication entre programmes?
    Bonjour, je suis encore un débutant en python (même si je commence à avoir un niveau suffisant pour l'instant).
    J'ai une question dont je n'ai pas trouver de réponse satisfaisante sur Internet. La question est comment faire communiquer divers programmes Python entre eux.
    Plus précisément sous la forme topologique d'un anneaux par exemple ou encore d'une étoile.
    J'ai bien quelque idée mais qui me paraissent "dangereuse pour la santé" des programmes:
    - Faire communiquer des données entre programmes via l'enregistrement et la lecture des données dans des fichiers ou base de données. -(Mais si les programmes se connectent tous en même temps sur un fichiers pour une certaines données en particuliers, cela va vite devenir problématique)-
    - Faire la même chose que ci-dessus mais avec un petit programme intermédiaire qui pourrai assurer la sécurité des transfert en évitant les diverse erreur possibles.

    En gros, comment réaliser un système de sous-programme (maître/esclave peut-être)? Tout en sachant que sache sous-programme doit être autonome dans le sens où l'arrêt du programme mère ne signifie par l'arrêt du sous-programme mais juste un changement dans son statut.

    Si vous avez des idées, tuto / cours sur le web, etc ... N'hésiter pas à m'en faire par.
    Cordialement, Kyu

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par Kyusuke Voir le message
    comment faire communiquer divers programmes Python entre eux.
    par des sockets

    Faire communiquer des données entre programmes via l'enregistrement et la lecture des données dans des fichiers ou base de données. -(Mais si les programmes se connectent tous en même temps sur un fichiers pour une certaines données en particuliers, cela va vite devenir problématique)
    ça va un peu dépendre de la nature de tes données

    des façons de partager des données il y en a énormément, avoir recours à une base de données pour partager quelques constantes de configuration on sent bien que c'est overkill, un simple fichier XML suffirait, à l'inverse se contenter d'une base de données alors qu'il est impératif que les données soient cloisonnées entre elles serait (est) une erreur et il vaudrait probablement mieux opter pour un annuaire ldap ou autre etc.

    quant au fait d'écrire à plusieurs dans un fichier, d'un coté les systèmes de gestion de bases de données (SGBD, mais aussi les systèmes de versionning comme git par exemple) sont justement fait pour ça, et ont donc une partie de leur code dédié à gérer les accès concurrentiels et/ou les fusions (merging) de modifications, d'un autre coté c'est aussi tout l'intérêt des sockets; un fichier ne peut pas être ouvert plusieurs fois en écriture, le noyau ne le permet pas, mais là chaque client a sa propre socket et peut y lire et y écrire comme il veut, charge au serveur central de donner la priorité d'écriture en fonction des critères souhaités

    Faire la même chose que ci-dessus mais avec un petit programme intermédiaire qui pourrai assurer la sécurité des transfert en évitant les diverse erreur possibles.
    ça dépend encore une fois, du volume de données et de leur criticité, de ce que ça implique de coder etc. "assurer la sécurité" en revanche ça ne s'improvise pas

    chaque sous-programme doit être autonome dans le sens où l'arrêt du programme mère ne signifie par l'arrêt du sous-programme mais juste un changement dans son statut.
    c'est du code, de l'algorithmie et la structure de tes programmes

    obliger les clients à gérer les déconnexions sans pour autant arrêter tout le programme ça se fait très bien, leur spécifier à l'inverse que si ils reçoivent la commande "SHUTDOWN" en provenance du maitre ils doivent terminer la connexion et quitter pareil ça se code facilement, c'est plutôt en amont qu'il faut arriver à se représenter tout ça mentalement, et ça passe simplement par la pratique en fait.

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Par défaut
    Merci beaucoup pour ces réponses qui me sont satisfaisante. Je vais me renseigner sur le concept des "sockets". Si tu veut savoir, les données en question seront de tous types, de toutes taille (poids), et surtout la moindre erreur dans les données transmises serait assez catastrophique. Car cela pourrai entraîner divers erreurs (tels un jeu de dominos), et faire faire planter des milliers de programmes (légers) si il n'y a pas de système de sécurité pour éviter cela.
    Merci encore pour les infos.

    Cordialement, Kyu

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    Le nom de ce principe de communication s'appelle : Inter-process communication (IPC)

    Le plus connu pour permettre d'échanger quelque soit le langage entre les processus est le socket.
    Son seul problème est qu'il ne supporte que des échanges de flux d'octets, il faut donc formater en entrée et sortie les données pour les échanger.
    Il est toutefois possible de faire ça simplement en utilisant pickle pour sérialiser/dé-sérialiser tous type d'objets Python : https://stackoverflow.com/a/24424025

    Quoiqu'il en soit le socket sera toujours moins rapide que d'échanger directement les objets entre processus/thread comme peuvent le faire d'autres outils plus adaptés.
    L'avantage du socket réside surtout dans le fait qu'il peut échanger à travers le réseau sur plusieurs ordinateurs, pour du calcul partagé par exemple.

    On est obligé de passer par de l'IPC quand les processus sont indépendants mais par contre si les processus/threads sont gérés par un même processus qui gère le tout alors il sera plus simple de partager des flux d'échanges qui supporteront de transmettre directement les variables objets de tous types.

    Et pour ça il existe Queue en utilisation de thread, qui s'utilise très facilement : https://docs.python.org/3/library/queue.html

    Et en multi-processus (mémoire/main d’exécution séparé) Pipes et Queues : https://docs.python.org/3/library/mu...pes-and-queues

Discussions similaires

  1. Communication entre programmes
    Par pdgnr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/08/2007, 17h33
  2. Réponses: 4
    Dernier message: 13/06/2007, 17h41
  3. communication entre programme
    Par nixonne dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/06/2006, 13h35
  4. communication entre programmes
    Par nixonne dans le forum C++
    Réponses: 11
    Dernier message: 16/06/2006, 20h04
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

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