Partage
  • Partager sur Facebook
  • Partager sur Twitter

Thread ne quitte pas correctement

et ne rendent pas la main

    13 novembre 2019 à 22:09:51

    Bonjour tous.

    Je suis en train de lutter contre un problème d'une appli que j'ai développé sur Raspberry Pi en embarqué (python 3.5.3 sous stretch).

    Mon appli comporte plusieurs Threads dans des classes distinctes, que j'initialise comme ça dans l'init(self,...) :

    threading.Thread.__init__(self)
    self._stopevent = threading.Event( )
    self.__stopped = False
    

    Par la suite dans la methode run(self) j'ai ma boucle while de telle sorte que :

    ...
    while not self._stopevent.isSet():
       ...
    self.__stopped = True
    print("thread xx arreté")
    

    et j'ai une methode stop(self):

    self._stopevent.set()
    print("Attente arret xxx", end = "\r")
    while self.__stopped == False:
    	time.sleep(0.1)
    

    La propriété __stopped c'est moi qui l'ai rajoutée, parce que certains thread peuvent naturellement être un peu longs à stopper. Donc, il sont 5 threads construits comme ça, avec en plus une fenêtre et un bus can (thread can.notifier). Tous ces threads font des choses assez différentes mais interagissent entre eux, de telle sorte que je dois les stopper dans un certain ordre.

    Mon problème, c'est que parfois (assez souvent) mes threads ne quittent pas correctement. La boucle s'arrête bien, mais ils ne rendent pas la main. Parfois, tout marche bien, ils quittent tous correctement et tout se passe bien.

    Y'a-t-il une consigne que je n'ai pas respectée, une façon de faire pour l'init et l'arret qui m'a échappée ?



    -
    Edité par JonathanJihzed 13 novembre 2019 à 22:14:26

    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2019 à 23:00:16

      je me réponds.

      Il y aurait un soucis lorsque plusieurs thread tournent et tentent s’arrêtent en même temps.

      avec un ctrl-C, ça sort une erreur sur l'un des thread.

      File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock
          elif lock.acquire(block, timeout):

      d'après ce que j'ai compris en fouillant sur internet, ce serait peut-être liè à l'utilisation de time.sleep dans les thread… à suivre

      • Partager sur Facebook
      • Partager sur Twitter

      Thread ne quitte pas correctement

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown