2013-04-26 216 views
3

何大家,如何停止線程python

我試圖停止這個線程時,程序停止(就像當我按Ctrl + C),但沒有運氣。 我試過把t1.daemon=True,但是當我這樣做時,我的程序剛啓動後就結束了。請幫我阻止它。

def run(): 
    t1 = threading.Thread(target=aStream).start() 

if __name__=='__main__': 
    run() 
+0

沒有「停止線程」這樣的事情。創建一個循環條件,當您收到'KeyboardInterrupt'時,您可以從外部設置該條件。或者在主線程中創建一個無限循環以保持程序活着,而其他線程是deamon – JBernardo 2013-04-26 14:10:12

回答

6

做你彷彿想要的一種常見方式,一會兒加入線程(S),像這樣:

def main(): 
    t = threading.Thread(target=func) 
    t.daemon = True 
    t.start() 
    try: 
     while True: 
      t.join(1) 
    except KeyboardInterrupt: 
     print "^C is caught, exiting" 

重要的是要做到這一點與超時一個循環是非常重要的(不是一個permament join()),因爲信號只被主線程捕獲,所以如果主線程被阻塞,永遠不會結束。

另一種方法是設置一些事件以讓非守護線程知道何時完成,看起來更像是令我頭疼的事情。

+0

真棒,它的工作原理!謝謝 – Vor 2013-04-26 14:14:27

+1

>>只是好奇:應該用一個小超時「0.01」還是一個比較大的比如'1'。 – pradyunsg 2013-04-26 14:18:57

+0

@Schoolboy依賴,但在這種情況下,主線程沒有任何用處,'1'會較少喚醒它,因此不會浪費CPU等待時間。 – bereal 2013-04-26 14:25:33