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

时间:2013-04-02 17:19:04

标签: python multithreading exit terminate

我正在寻找一种使用sys.exit()来终止线程的方法。 我有两个函数add1()subtract1(),它们分别由每个线程t1t2执行。我想在完成t1后完成add1()t2后终止subtract1()。我可以看到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()

1 个答案:

答案 0 :(得分:2)

sys.exit()实际上只引发SystemExit异常,只有在主线程中调用它才会退出程序。您的解决方案“有效”,因为您的线程没有捕获SystemExit异常,因此终止。我建议你坚持使用类似的机制,但是使用你自己创建的异常,以便其他人不会因为非标准使用sys.exit()(它没有真正退出)而感到困惑。

class MyDescriptiveError(Exception):
    pass

def my_function():
    raise MyDescriptiveError()