2011-10-05 185 views
1

有沒有辦法「暫停」應用程序的主python線程?Python暫停線程執行

我有一些代碼,觸發關閉兩個線程

class start(): 
    def __init__(self): 
     Thread1= functions.threads.Thread1() 
     Thread1.setDaemon(True) 
     Thread1.start() 
     Thread2= functions.threads.Thread2() 
     Thread2.setDaemon(True) 
     Thread2.start() 

     #Stop thread here 

此刻,當程序獲取到它退出該函數結束時(沒有別的主線程後,這樣做) ,殺死無限運行的線程(循環)。我如何阻止主流程退出?我可以用while True: None循環來完成,但是它使用了大量的CPU,並且可能有更好的方法。

+0

爲什麼你要啓動另一個線程,如果你可以在主線程上執行一個額外線程的工作負載呢?換句話說,你爲什麼要創建兩個線程,並希望讓主線程等待,而不是隻產生一個線程並在主線程上運行Thread2的工作負載? –

+0

對於空循環體,'pass'會比'None'更有意義。 –

回答

4

如果您不在線程上執行setDaemon(True),只要線程運行,進程就會繼續運行。

守護進程標誌指示解釋器不需要等待線程。只有守護進程線程退出時它將退出。

4

使用join

Thread1.join() 
Thread2.join() 

還要注意的是setDaemon是舊的API。

Thread1.daemon = True 

是現在的首選方式。

+0

它會忽略Ctrl-c,但Ctrl- \(SIGQUIT)仍可用於終止程序。 – unutbu

4

守護線程的整點是而不是如果任何應用程序仍在運行,請阻止應用程序終止。你顯然希望你的線程保持應用程序的活動,所以不要讓它們成爲守護進程。