2011-07-14 182 views
1

我正在寫一些簡單的代碼,我使用Pygame來繪製圖形,並且我有一個線程可以繪製一切。當我調用sys.exit()或只是按Ctrl + C時,主程序退出,但線程似乎仍然活着。我想我需要關閉它。我怎麼做?如何退出一個運行線程的Python程序?

例子:

import threading 

class Bla(threading.Thread): 
    def run(self): 
     print "I draw here" 

Bla().start() 

while True: 
    if user_wants_to_end: 
     sys.exit() 

當我確實想退出程序不會退出!我如何關閉線程?

+4

「Simple code」和「thread」在同一句中? Tsk,tsk。不要使用多線程,因爲它似乎是個好主意,在實際需要時使用它。 –

+1

這看起來像是重複的;你可能想看看[這裏](http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python/325528#325528)尋求幫助。 – myusuf3

+0

這個程序並不完全顯示你的問題,因爲它退出的速度很快。但是,如果在run()方法中添加諸如'time.sleep(1000000)'之類的東西,則可以說明問題。 – EOL

回答

1

當所有非守護線程完成時,Python程序退出。

class Bla(threading.Thread): 
    daemon = True # Make the thread daemon 
    def run(self): 
     print "I draw here" 
+0

僅供參考:「當沒有活動的非守護程序線程被留下時,整個Python程序退出。」 (線程模塊文檔)。 – EOL

+0

難道沒有辦法讓線程從主程序中終止,而沒有在線程代碼中專門處理這個問題嗎? – EOL

+0

我很確定答案是否定的。您可以使用一個進程(請參閱多處理器)或在您的線程代碼中進行顯式檢查(通常使用事件)。 – lazy1

相關問題