使用sys.exit()终止python线程



我正在寻找一种通过使用sys.exit()来终止线程的方法。我有两个函数add1()subtract1(),分别由每个线程t1t2执行。我想在完成add1()后终止t1,在完成subtract1()后终止t2。我可以看到sys.exit()是这样做的。这样做可以吗?

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()实际上只会引发SystemExit异常,并且只有在主线程中调用时才会退出程序。你的解决方案"工作",因为你的线程没有捕获SystemExit异常,所以它终止。我建议你坚持使用类似的机制,但使用你自己创建的异常,这样其他人就不会被sys.exit()的非标准使用所迷惑(它并不真正退出)。

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

相关内容

  • 没有找到相关文章

最新更新