原型:加入([超時])
裏面的參數是可選的,代表線程的最大運行時間,也就是超過這個時間,不管線程是否已經執行完,都會被回收,然後主線程或者函數繼續執行。
示例:
導入線程
導入時間
類MyThread(線程。線程):
def __init__(self,id):
threading.Thread.__init__(self)
self.id = id
定義運行(自身):
x = 0
時間.睡眠(10)
打印自我標識
if __name__ == "__main__ ":
t1=MyThread(999)
t1.start()
對於範圍(5)中的I:
打印I
實施後的結果是:
1
2
三
四
緊急服務電話
機器運行時,4到999之間有明顯的停頓。說明:線程t1啟動後,主線程沒有等到線程t1運行完,而是打印完了5次(打印到4),然後休眠(10)後,線程t1打印了傳入的999。
現在,讓我們添加join()方法(其他代碼保持不變),看看有什麽不同。示例:
導入線程
導入時間
類MyThread(線程。線程):
def __init__(self,id):
threading.Thread.__init__(self)
self.id = id
定義運行(自身):
x = 0
時間.睡眠(10)
打印自我標識
if __name__ == "__main__ ":
t1=MyThread(999)
t1.start()
t1.join()
對於範圍(5)中的I:
打印I
實施後的結果是:
緊急服務電話
1
2
三
四
機器運行時,999前有明顯的停頓。說明:線程t1啟動後,主線程在join()方法處停止。睡眠(10)後加入線程T10,然後主線程繼續循環打印。
2.setDaemon()參與方
法律。在主線程A中創建壹個子線程B,在主線程A中調用B.setDaemon(),這意味著主線程A被設置為守護線程。此時,如果主線程A保持不變,
當行結束時,不管子線程B是否完成,都和主線程a壹起退出,這就是setDaemon方法的意義,基本上和join相反。另外,還有壹點需要特別註意:必須在start()
在調用方法之前設置。如果沒有設置為守護線程,程序將無限期掛起。
示例:將子線程設置為以主線程的結尾結束:
導入線程
導入時間
類MyThread(線程。線程):
def __init__(self,id):
threading.Thread.__init__(self)
定義運行(自身):
時間.睡眠(5)
打印“這是”+ self.getName()
if __name__ == "__main__ ":
t1=MyThread(999)
t1.setDaemon(True)
t1.start()
打印“我是父線。”
實施後的結果是:
我是父線。
可以看出,子線程t1中的內容不是類型化的。解釋:t1.setDaemon(True)操作將父線程設置為守護線程。根據setDaemon()方法的含義,父線程在打印完內容後結束,不管子線程是否已經執行完。
旅行
在順序操作中,執行壹個主線程。如果主線程創建了另壹個子線程,那麽主線程和子線程將會分開運行。當主線程結束想退出時,會檢查子線程是否結束。若若子
如果線程沒有結束,主線程將在退出前等待子線程結束。但是有時候我們需要只要主線程結束就用主線程退出,不管子線程是否結束,所以這個時候就可以用。
SetDaemon方法。
所以join和setDaemon的區別就像上面的例子,它們基本上是相反的。