當前位置:成語大全網 - 書法字典 - Python中線程join和setDaemon的區別和用法

Python中線程join和setDaemon的區別和用法

1,join()方法:在主線程A中創建壹個子線程B,在主線程A中調用B.join(),然後主線程A會在調用處等待,直到子線程B完成操作,然後調用這個線程時就可以使用被調用線程的join方法了。

原型:加入([超時])

裏面的參數是可選的,代表線程的最大運行時間,也就是超過這個時間,不管線程是否已經執行完,都會被回收,然後主線程或者函數繼續執行。

示例:

導入線程

導入時間

類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的區別就像上面的例子,它們基本上是相反的。