Bonjour,

J'ai un programme qui lance un thread qui doit effectuer un traitement. Une fois le traitement terminé, je souhaite que le thread s'arrête, puis le relancé à nouveau plus tard.
J'ai fait une représentation simple de ce que fait mon programme :

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
 
from threading import Thread, Event
import time
 
class MonThread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self._stopevent = Event()
 
    def run(self):
        print("Ligne 1")
        self._stopevent.wait(1)
        print("Ligne 2")
 
thr = MonThread()
thr.start()
time.sleep(0.5)
print("Thread alive : {}".format(thr.is_alive()))
time.sleep(1)
print("Thread alive : {}".format(thr.is_alive()))
if not thr.is_alive():
    thr.start()
Le code suivant me donne la sortie console suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Ligne 1
Thread alive : True
Ligne 2
Thread alive : False
Traceback (most recent call last):
  File "D:/Profiles/flebaillif/Alarme/testThread.py", line 21, in <module>
    thr.start()
  File "C:\Program Files (x86)\Python\Python36-32\lib\threading.py", line 842, in start
    raise RuntimeError("threads can only be started once")
RuntimeError: threads can only be started once
Je ne comprends pas pourquoi je ne peux pas relancer un thread terminé, et du coup comment faire.