Comment faire réagir un programme python multithread à l'événement Ctrl+C ?
Edita: Le code est le suivant :
import threading
current = 0
class MyThread(threading.Thread):
def __init__(self, total):
threading.Thread.__init__(self)
self.total = total
def stop(self):
self._Thread__stop()
def run(self):
global current
while current<self.total:
lock = threading.Lock()
lock.acquire()
current+=1
lock.release()
print current
if __name__=='__main__':
threads = []
thread_count = 10
total = 10000
for i in range(0, thread_count):
t = MyThread(total)
t.setDaemon(True)
threads.append(t)
for i in range(0, thread_count):
threads[i].start()
J'ai essayé de supprimer join() sur tous les threads mais cela ne fonctionne toujours pas. Est-ce parce que le segment de verrouillage se trouve à l'intérieur de la procédure run() de chaque thread ?
Edita: Le code ci-dessus est censé fonctionner, mais il s'interrompt toujours lorsque la variable courante se situe dans la plage 5 000-6 000 et génère les erreurs suivantes
Exception in thread Thread-4 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.5/threading.py", line 486, in __bootstrap_inner
File "test.py", line 20, in run
<type 'exceptions.TypeError'>: unsupported operand type(s) for +=: 'NoneType' and 'int'
Exception in thread Thread-2 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.5/threading.py", line 486, in __bootstrap_inner
File "test.py", line 22, in run
0 votes
À titre d'information, je rencontre les problèmes suivants le même problème, mais avec la version la plus récente
concurrent.futures
module . J'essaie toujours de comprendre si ou comment les solutions proposées ici peuvent être transposées de l'anglais à l'allemand.threading
aconcurrent.futures
.