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 :

Import en background


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 26
    Points
    26
    Par défaut Import en background
    Salut à tous.

    dans mon script python principal je fais appel à une fonction qui fait un import d'un script python. Ce second script fait pas mal de choses et prends un peu de temps.

    Comment je pourrais faire pour faire un import de ce script mais en background et laisser mon script principal (qui est en fait un GUI génèré avec wx) faire d'autres choses.

    Et surtout j'aimerais aussi savoir quand il a terminé

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    J'ai bien trouvé ceci mais je ne vois pas comment faire pour savoir quand il a fini et lancer quelque chose après

    pid = subprocess.Popen([sys.executable, "longtask.py"]) # call subprocess

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Bienvenue dans le monde des threads.

    Un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from threading import Thread
    from longtask import LongTask
     
    class Main(object):
        def __init__(self):
        # Ton programme principal
        ...
        lt = LongTask(self) # Il faut lui passer l'instance de Main
        lt.start()
     
        def task_finished(self, args):
            print "Task finished" 
            # et eventuellement exploitation des arguments en retour de LongTask
    longtask.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from threading import Thread
     
    class LongTask(Thread):
        def __init__(self, bind):
            self.bind = bind
            ...
            Thread.__init__(self)
     
        def run(self):
            # DOIT s'appeler run
            ...
            # Lorsque fini
            self.bind.task_finished(retours) # Si retours necessaires
    Tu remarqueras, start() et run() doivent s'appeler comme ça.

    Ce n'est que la première approche de theads, le module threading
    http://docs.python.org/library/threa...dule-threading
    recèle de méthodes bien utiles comme enumerate() qui te liste les threads encore en vie et plein d'autres choses.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    Le constructeur de Thread permet de transformer en thread n'importe quelle fonction. Pour savoir si elle est terminée ou attendre que... Ce n'est pas bien compliqué non plus.
    - W

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from threading import Thread
    import time
     
    def worker(count):
        while count > 0:
            time.sleep(0.1)
            count -= 1
     
    if __name__ == '__main__':
        t = Thread(target=worker, args=(5,))
        t.start()
        print 'is alive: %s' % t.is_alive()
        t.join()
        print 'done'
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 26
    Points
    26
    Par défaut
    Un tout grand merci ca marche super bien !

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

Discussions similaires

  1. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  2. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  3. [DEV-C++]#import de fichier .tlb
    Par pdl dans le forum Dev-C++
    Réponses: 6
    Dernier message: 19/07/2002, 22h46
  4. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  5. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

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