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 :

arreter et redemarrer un thread


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut arreter et redemarrer un thread
    bonjour,

    Voil à j'essaye d'arrete et de relancer mon thread en gardant "le même"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    class monThread(Thread):
       def __init__(self):
          Thread.__init__(self)
     
       def run(self):
           self._etat = True
           while self._etat:
              #faire plein de truc...
     
        def stop(self)
            self._etat = False

    pour le lancer et l'arreter je fais bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    m = monThread()
    m.start()
    ....
    m.stop()
    mais quand je veux le relancer en faisant :
    il me dis que le thread est dejà lancé.... comment le relancer?

    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Pourquoi ne pas crééer une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def continuer():
        self._etat = True

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    j'ai deja essyé, cela ne marche pas

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    peut-être qu'avec la méthode join() ( http://docs.python.org/lib/thread-objects.html ), tu peux y arriver. j'ai pas très bien compris comment ca marchait mais j'aurais dit qu'il suffit de créer un thread qui tourne dans le vide et qui bloque ou débloque le thread principal (en tuant ou non ce thread vide). Enfin, c'est peut-être de la bidouille.
    Ou peut-être se tourner vers d'autres formes de thread (sémaphore ? http://docs.python.org/lib/semaphore-objects.html )

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    merci de m'aider

    Si je me souviens bien (je crois ca fait longtemps..) les semaphores ne sont ils pas les noms francais pour mutex (mutel exception) ? (cad : proteger une/des ressources)

    Mais je crois que je vas en fait terminer ce thread et en relancer un autre avec des "parametres.."

    Mais j'ai un autre souci, lorsque je ferme la fenetre et que le thread est lancé, tout le prog plante (erreur windows : ce prog ne repond pas...)

    peut on mettre un evenement sur la fermeture de la fenetre ?

    merci

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 76
    Par défaut
    Citation Envoyé par CaptainChoc
    bonjour,
    mais quand je veux le relancer en faisant :
    il me dis que le thread est dejà lancé.... comment le relancer?

    merci de votre aide
    A premiere vue je dirais qu'il faut introduire une variable de controle supplémentaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    import threading
    import time
     
    class monThread(Thread):
       def __init__(self):
          Thread.__init__(self)
           self._etat = False
           self._pause = False
     
       def run(self):
           self._etat = True
           while self._etat:
              if self._pause:
                  time.sleep(0.1)  # éviter de saturer le processeur
                  continue 
              #faire plein de truc...
     
        def stop(self)
            """Arrête l'exécution du thread.
     
            Après avoir appelé cette fonction le thread n'est plus utilisable.
            """
            self._etat = False
     
        def pause(self):
            """Arrête l'exécution du thread momentanément."""
            self._pause = True
     
        def continue(self):
            """Reprendre l'exécution d'un thread 'mis en pause'."""
            self._pause = False
    Le but est de ne pas terminer la méthode run(), car une fois qu'elle est achevée le thread n'est plus utilisable.

    join() est utilisé pour attendre la fin de l'exécution d'un thread. En d'autres termes, le programme ne sera pas exécuté plus loin tant que le thread en question ne sera pas fini.

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    ah.... merci naxelas, j'essaye ca et je te tiens au courant

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    merci, ca marche nikel....

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

Discussions similaires

  1. GPO pour retiter les boutons arreter et redemarrer
    Par paco503 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 06/05/2014, 19h07
  2. redemarrer un thread depuis un autre thread
    Par ronki dans le forum C#
    Réponses: 1
    Dernier message: 01/07/2009, 11h13
  3. [manager]arreter et redemarrer une appli
    Par alexandra dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 15/09/2006, 18h50
  4. [VB6] Arreter ou redemarrer son PC
    Par alliance dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/05/2006, 11h51
  5. Réponses: 3
    Dernier message: 30/08/2005, 09h09

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