Termine los hilos de python usando sys.exit ()

Estoy buscando una manera de terminar un hilo usando sys.exit (). Tengo dos funciones add1() y add1() , que son ejecutadas por cada hilo t1 y t2 respectivamente. Quiero terminar t1 después de terminar add1() y t2 después de terminar subtract1() . Pude ver que sys.exit() hace ese trabajo. ¿Está bien hacerlo de esa manera?

 import time, threading,sys functionLock = threading.Lock() total = 0; def myfunction(caller,num): global total, functionLock functionLock.acquire() if caller=='add1': total+=num print"1. addition finish with Total:"+str(total) time.sleep(2) total+=num print"2. addition finish with Total:"+str(total) else: time.sleep(1) total-=num print"\nSubtraction finish with Total:"+str(total) functionLock.release() def add1(): print '\n START add' myfunction('add1',10) print '\n END add' sys.exit(0) print '\n END add1' def subtract1(): print '\n START Sub' myfunction('sub1',100) print '\n END Sub' sys.exit(0) print '\n END Sub1' def main(): t1 = threading.Thread(target=add1) t2 = threading.Thread(target=subtract1) t1.start() t2.start() while 1: print "running" time.sleep(1) #sys.exit(0) if __name__ == "__main__": main() 

sys.exit () realmente solo genera la excepción SystemExit y solo sale del progtwig si se llama en el hilo principal. Su solución “funciona” porque su hilo no atrapa la excepción de SystemExit y, por lo tanto, termina. Le sugiero que se limite a un mecanismo similar, pero use una excepción que cree usted mismo para que los demás no se confundan con un uso no estándar de sys.exit () (que en realidad no termina).

 class MyDescriptiveError(Exception): pass def my_function(): raise MyDescriptiveError()