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