2010-06-21 61 views
2

我需要在python程序中啓動一些線程。線程執行後臺任務可能需要很長時間,所以我不想阻塞等待任務發生的主線程。顯式加入python線程?

Python提供了使用Thread.join()和Thread.isAlive()「收穫」線程的功能。但我實際上並不在乎發現線程何時完成。我很滿足於啓動線程,讓它做到這一點,不再擔心它。

問題是,我是否需要繼續引用Thread對象,以便我可以稍後加入()它們?或者我可以讓線程對象的引用超出範圍,而不用擔心它?在這種情況下是否有「正確」的事情?

回答

1

您不必明確join線程 - 只是確保他們不是「守護進程的」(離開自己daemon屬性爲默認,False)所以他們會保持過程的生命,直到他們全部完成(如果你創建線程守護進程,那麼你必須確保主線程不會終止,直到所有相關線程完成,否則線程將被操作系統終止)。

我認爲正確的事情是最簡單的:忘掉你的「後臺線程」,讓它們成爲非守護進程(畢竟它們是默認狀態)。

+0

但是,如果你不'join()'它們(不管它們的_daemonization_),那麼這些線程是否會保留在_zombie_狀態? – C2H5OH 2012-05-17 09:54:25