Bonjour à tous,

J'ai un programme qui lance plusieurs Thread. Lorsque je lance un signal sur mon processus main je voudrais qu'il termine les threads.

Mon problème est que mon programme intercepte bien les signaux mais uniquement si les threads n'ont pas été lancés.

Pour plus de clarté, voici mon code simplifié :

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import signal
import wiringpi2 as wiringpi
import MySQLdb as mdb
from time import sleep
from threading import Thread
 
def stop_programme(signal, frame):
	print """STOP"""
	sys.exit(0)
 
signal.signal(signal.SIGINT, stop_programme)
 
...
def Fonctions
...
 
class Sequence(Thread):
	"""Chaque séquence est envoyée en Thread pour permettre une exécution parallèle"""
	def __init__(self, pinGPIO, sequenceList):
		Thread.__init__(self)
		self.pinGPIO = pinGPIO
		self.sequence = sequenceList
		self.stoprequest = False
 
	def run(self):
		"""Parcours la sequence pour écrire les états GPIO sur la pin donnée"""
		while not self.stoprequest:
			for index, elt in enumerate(self.sequence):
				# wiringpi.digitalWrite(self.pinGPIO, elt[0])
				print "Guirlande : %d" % self.pinGPIO
				sleep(elt[1])
 
	def terminate():
		self.stoprequest = True
 
try:
	...
	Début du programme
	...
	Lancement des Threads
except Exception, e:
	print repr(e)
	sys.exit(1)
Si quelqu'un aurait une solution pour résoudre mon problème ou une piste.

Merci !