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

Interfaçage autre langage Python Discussion :

Utiliser un thread en code Fortran


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Utiliser un thread en code Fortran
    Bonjour,

    J'ai un programme Python qui est divisé en:
    - une IHM
    - un thread de calcul

    Le thread de calcul, bien qu'utilisant numpy, est lent à s'exécuter.

    Le même calcul demande 50 à 80 fois moins de temps pour s'exécuter en Fortran

    Il est pour moi très facile de faire le thread de calcul entièrement en Fortran sous forme d'un .exe, mais je ne vois pas :
    1- comment l'appeler à partir du code Python
    2- comment échanger quelques données entre le thread en Fortran et le programme Python
    3- comment les synchroniser

    J'ai survolé f2py, mais c'est plutôt adapté à l'insertion de code Fortran dans du code Python.
    Dans mon cas, je préfèrerais carrément lancer le calcul sous forme d'un .exe en Fortran qui échangerait quelques données avec du code Python.

    Si quelqu'un a déjà fait et/ou sait comment faire ... je suis preneur de toute information.

    Bonne journée

  2. #2
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    si tu choisis l'option d'utiliser un programme .exe fortran, tu peux te servir du module subprocess et notamment de la fonction subprocess.Popen.
    Ca te permet d'exécuter un autre programme depuis Python et éventuellement récupérer ce qu'il écrit en sortie standard et/ou lui donner ce qu'il attend en entrée standard.

    Par exemple, si tu as écrit un programme Fortran calcul.exe qui prend 2 entiers en argument et écrit un résultat en sortie standard.

    Tu peux écrire ce genre de code dans un thread
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import subprocess
     
    val1 = ....
    val2 = ....
    #val1 et val2 sont les deux arguments pour le programme calcul.exe
    process = subprocess.Popen(['calcul.exe', str(val1), str(val2)], stdout=subprocess.PIPE)
    output = process.comunicate()[0]
    # traiter l'output de calcul.exe
    ....
    http://docs.python.org/library/subprocess.html

    Pour f2py, je ne peux pas dire grand chose car je ne connais pas Fortran.

    Sinon, une question, tu te sers de quelle bibliothèque pour ton IHM ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour et merci,

    Je regarde cela ce soir ou demain matin.

    Pour l'IHM, j'utilise Tkinter.

    Merci encore et bon dimanche.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    si l'échange d'information dont tu parles s'effectue par l'intermédiaire de fichiers, via des arguments de lancement ou des entrées claviers subprocess.Popen est tout à fait indiqué.

    si l'échange d'information doit être plus important, par exemple utiliser un tableau numpy défini dans ton code python dans ton programme fortran ou inversement, f2py est la meilleure option.

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

    J'ai survolé f2py, mais c'est plutôt adapté à l'insertion de code Fortran dans du code Python. Dans mon cas, je préfèrerais carrément lancer le calcul sous forme d'un .exe en Fortran qui échangerait quelques données avec du code Python.
    J'entends mais... un executable est une entité qui va demander un processus pour s'exécuter.
    f2py travaille ailleurs: comment pousser le code Fortran dans une bibliothèque et poser dessus une API Python qui permette de la faire fonctionner?

    => Plutôt que d'avoir un .exe fortran "pur", vous avez un "main" python qui "parle" à une bibliothèque fortran à laquelle il accéde par un import du module qui va bien.
    Dit autrement vous avez intégré le code Fortran dans l'environnement Python et vous pouvez même oublier qu'il s'agit de Fortran: vous ne verrez que l'API.
    Cela permet notament de lancer la chose dans une threads (et pas seulement dans un process "à part") et d'avoir du python de bout en bout pour controler la bete.

    - W
    PS: Je raconte ca parce que s'il y a quelque chose qui est 'top' avec Python c'est justement de pouvoir réaliser ce type d'intégration de code.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Merci Beribibi, merci Kango, merci Wiztricks,


    Bon, j'ai trouvé de la doc sur f2py (voir ici) et tenté de faire le bête exemple avec la suite de Fibonacci ...

    Je n'arrive pas à lancer :
    f2py -c fib1.f -m fib

    Si je suis sur la shell Python ... je reçois un message "syntax error" avec fib1.f en surbrillance ...

    Si je me mets sous Dos dans le répertoire C:\python26\lib\site-packages\f2pye ... je reçois le message "f2py n'est pas reconnu comme une commande" ...

    Il semblerait que f2py soit mal installé, en effet quand je tape "f2py" sur la shell python, je reçois le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        f2py
    NameError: name 'f2py' is not defined
    ...

    J'ai essayé plusieurs trucs, mais je suis perdu ..


    Bonne journée

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    est une commande pour le shell, pas pour python.

    la doc est relative à un environnement Unix/Linux (voire Mac ?). Sur windows, il faut utiliser le script f2py.py qui se trouve dans:

    C:\Python26\Scripts

    donc tu peux te faire un script batch (.bat) dans lequel tu mets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Python\python.exe C:\Python\Scritps\f2py.py -c fib1.f -m fib
    ou plus court:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Python\Scritps\f2py.py -c fib1.f -m fib

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

    Vérifiez aussi que le répertoire C:\Python26\Scripts est dans le 'path' windows.
    - W

Discussions similaires

  1. [VBA] utilisation de thread
    Par nemesys971 dans le forum VBA Access
    Réponses: 19
    Dernier message: 10/10/2008, 11h49
  2. Utilisation de 'cout' et code portable ??
    Par LaVaZza dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/12/2005, 20h05
  3. Utilisation des threads
    Par Valinor dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2005, 17h41
  4. Utilisations des Threads
    Par phoenix440 dans le forum Réseau
    Réponses: 15
    Dernier message: 21/08/2005, 18h19
  5. Thread de code indentique Multiples
    Par Cambon dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2005, 15h20

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