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 :

Lancer en parallèle des exécutables dans un script python


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2015
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Lancer en parallèle des exécutables dans un script python
    Bonjour,

    Je suis un peu perdu dans la programmation parallèle avec python et j'aurai besoin de conseils pour m'orienter.

    Je dispose d'un gros programme écrit en fortran qui prend en entrée plusieurs fichiers de données et qui me produit en sortie une série de données que je traite par la suite avec python.

    Mon script python prépare les données d'entrée, puis je souhaite que de façon parallèle il fasse tourner plusieurs copie de mon programme fortran situées dans différents dossiers temporaires. Une fois les séries de données produites, mon script python traite les données.

    Pour cela j'ai utilisé des threads

    th1=lanceProg(data1)
    th2=lanceProg(data2)

    th1.start()
    th2.start()

    th1.join()
    th2.join()

    Le problème est le suivant. Les lignes suivantes exécutée dans chaque thread posent problème :

    ex: dans le k-ième thread

    os.chdir('dossier_k')
    os.system('./monProgramme_copie_k')
    os.chdir('../')

    il y a sans doute mieux comme approche pour exécuter en parallèle différents programmes avec python.

  2. #2
    Membre confirmé Avatar de Andarus
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 137
    Points : 455
    Points
    455
    Par défaut
    Les Threads en python sont une mauvaise idée pour accélérer un programme, python(cpython) ne peut s'exécuter que sur un seul 'cœur'.

    Il vaut mieux se tourné faute de mieux vert le package multiprocessing :
    https://docs.python.org/3.4/library/...rocessing.html

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par Andarus Voir le message
    Les Threads en python sont une mauvaise idée pour accélérer un programme, python(cpython) ne peut s'exécuter que sur un seul 'cœur'.
    En fait, si vous regardez mieux ce que fait le PO, il n'utilise les threads que pour executer os.system. Dans ce cas, le système d'exploitation parallélise des process indépendants sur différents processeurs. Les threads Python attendent que çà se termine.

    Citation Envoyé par halleck314 Voir le message
    Les lignes suivantes exécutée dans chaque thread posent problème :

    ex: dans le k-ième thread

    os.chdir('dossier_k')
    os.system('./monProgramme_copie_k')
    os.chdir('../')

    il y a sans doute mieux comme approche pour exécuter en parallèle différents programmes avec python.
    En supposant que le problème soit du à os.chdir qui sera "global", il serait judicieux de remplacer cela par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          os.system('cd dossier_k; ./monProgramme_copie_k')
    dit autrement, on change le répertoire courant dans le contexte de l'appelé...

    - W

    edit: les threads ne permettent ici que de lancer les appels à os.system sans se retrouver bloqué à attendre la fin de la commande exécutée. Appeler directement subprocess.Popen serait bien plus simple.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2015
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Merci ça répond parfaitement à ma question. Le problème venait bien de os.chdir.

    Et merci pour le tuto plus clair que ceux que j'avais vu jusqu'à présent.

Discussions similaires

  1. Exécuter des .jar dans mes scripts Php
    Par okoweb dans le forum Langage
    Réponses: 1
    Dernier message: 23/11/2011, 14h31
  2. Réponses: 2
    Dernier message: 11/08/2009, 17h09
  3. Paralleliser des commandes dans un script
    Par MC wacko dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/08/2008, 22h45
  4. Actualisations automatiques des liens dans mon script
    Par Geekolin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/01/2008, 14h01
  5. [AIX] Gestion des erreurs dans un script
    Par f-k-z dans le forum AIX
    Réponses: 2
    Dernier message: 17/07/2007, 08h45

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