Bonjour a tous !

J'ai un code comportant plusieurs threads qui tourne en boucle et je souhaite les stopper proprement a la fin des threads. Dans le contexte où mon code travail, le plus simple (a mon avis) serait de lancer un autre fichier python qui vient arrêter les threads de l'autre fichier. J'ai cherché sur divers site mais pas possible de trouver une solution :/

Contrainte !! Je bosse sur un module hardware que j'ai conçu et suis contrait de travailler en python2...

Voici mon code:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
 
#!/usr/bin/python2.7
#-*-coding:Latin-1-*
 
import random
import sys
from threading import Thread
import time
import datetime
import time
import os
import re
import sqlite3
import signal
import sys
from subprocess import check_output
from servSMS import envSMS
from Cryptage import crypt, decrypt
from SNMP import request
 
class Interface(Thread):
 
 
	def __init__(self):
		Thread.__init__(self)
 
	def run(self):
		conn1 = sqlite3.connect('/mnt/Disk2/mysql/Equipements.db')
		c1 = conn1.cursor()
		print ('Ouverture de Equipements.db')
 
		conn2 = sqlite3.connect('/mnt/Disk2/mysql/Historique.db', check_same_thread=False)
		c2 = conn2.cursor()
		print ('Ouverture de Historique.db')
 
		conn3 = sqlite3.connect('/mnt/Disk2/mysql/Oid.db')
		c3 = conn3.cursor()
		print ('Ouverture de Oid.db')
 
		model = ('SW',)
		catRef = ('4',)
		if __name__== "__main__":
			while (1):
				for OidByCat in c3.execute('SELECT * FROM Oid WHERE Cat=?', catRef):
					for row in c1.execute('SELECT * FROM Equipements WHERE Type=?', model):
						print ('Int|ID: '+ row[0] + " adresse -> " + row[3])
 
						# Requete
						reponseglob = str(request(str(row[3]), OidByCat[1]))
						print (reponseglob)
						print ('Int|fin pour '+ row[3])
 
						# Traitement réponse
						tmp = reponseglob.split(')')
						i = 0
						for reponse in tmp:
							# Id interface
							i += 1
							interface = str(row[0]) + 'i' + str(i)
 
							# Valeur interface
							val = reponse[-1:]
 
							# Date
							date = datetime.datetime.now()
 
							#Construction ligne 
							ligne = [row[0], row[1], row[2], row[3], interface, str(val), str(date)]
 
							# Comparaison avec dernière val
							lastInterface = (interface,)
							c2.execute('SELECT * FROM Historique WHERE Interface = ? ORDER BY IdHist DESC', lastInterface)
							lastVal = c2.fetchone()
							if str(lastVal[6]) != val:
								print ('Attention changement d\'état interface:' + interface + 'du SW' + str(row[0]))
								print ('Dernière entrée dans la BDD: ')
								print lastVal
								print ('Requete actuelle: ')
								print ligne
								print ('Comparaison entre ' + lastVal[6] + ' et ' + val)
 
								# Construction du message
								msg = ('NC1052 NA183 NE' + str(row[0]) + ' ' + str(row[1]) + ' ' + str(row[3]) + ' ' + interface +' -> Perte connexion le ' + date)
 
								# Envoie du SMS
								envSMS('+33767301164', msg)
							c2.execute("INSERT INTO Historique (IdEq, Nom, Type, Ip, Interface, Val, Dat) VALUES (?, ?, ?, ?, ?, ?, ?);", ligne)
							conn2.commit()
					time.sleep(3)
 
 
class Temp(Thread):
 
	def __init__(self):
		Thread.__init__(self)
 
	def run(self):
 
		## Ouverture des BDD
		conn1 = sqlite3.connect('/mnt/Disk2/mysql/Equipements.db')
		c1 = conn1.cursor()
		print ('Ouverture de Equipements.db')
 
		conn2 = sqlite3.connect('/mnt/Disk2/mysql/Historique.db', check_same_thread=False)
		c2 = conn2.cursor()
		print ('Ouverture de Historique.db')
 
		conn3 = sqlite3.connect('/mnt/Disk2/mysql/Oid.db')
		c3 = conn3.cursor()
		print ('Ouverture de Oid.db')
 
		# Définition des références
		model = ('SW',)
		catRef = ('1',)
		if __name__== "__main__":
			while (1):
				for OidByCat in c3.execute('SELECT * FROM Oid WHERE Cat=?', catRef):
					for row in c1.execute('SELECT * FROM Equipements WHERE Type=?', model):
 
						# Réponse générée
						print ('Temp|ID: '+ row[0] + " adresse -> " + row[3])
						reponseglob = str(request(str(row[3]), OidByCat[1]))
						print (reponseglob)
						print ('Temp|fin pour '+ row[3])
 
						i = 'X'
						temp = ''
						for lettre in reponseglob[60:62]:
							temp = temp + lettre
 
						# Date
						date = datetime.datetime.now()
 
						#Construction ligne 
						ligne = [row[0], row[1], row[2], row[3], i, temp, str(date)]
						c2.execute("INSERT INTO Historique (IdEq, Nom, Type, Ip, Interface, Val, Dat) VALUES (?, ?, ?, ?, ?, ?, ?);", ligne)
						conn2.commit()
				time.sleep(5)
 
# Création des threads
thread_1 = Interface()
thread_2 = Temp()
 
# Lancement des threads
thread_1.start()
thread_2.start()
 
# Attend que les threads se terminent
thread_1.join()
thread_2.join()
En vous remerciant pour l'attention que vous porterez a mon message