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
|
# importations fonctionnellement nécessaires
import threading
import sys
# importation seulement nécessaire pour l'exemple
import time
from math import sqrt
##################################################
def calcultreslong():
i=1L
while i<10000000000L:
x=sqrt(i)
i+=1
if calcul.arret:
raise ValueError (u"Arrêt du calcul demandé")
return x
##################################################
class Calcul(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.arret=False # =variable pour porter l'ordre d'arrêter le thread
def run(self):
try:
calcultreslong()
except ValueError:
print u"%s" % sys.exc_info()[1]# affichage du message d'erreur
# fin de run, donc fin du thread
def stopcalcul(self):
self.arret=True
##################################################
print "Lancement du thread"
calcul=Calcul()
calcul.start()
tps=time.time()
while calcul.isAlive():
if time.time()-tps > 5: # arrêt du thread au bout de 5 secondes
calcul.stopcalcul()
time.sleep(0.1)
print "fin du thread"
time.sleep(2) |
Partager