Python 多線程 thread join() 的作用

在 Python 的多線程編程中,在實(shí)例代碼中經(jīng)常有 thread1.join()這樣的代碼。那么今天咱們用實(shí)際代碼來解釋一下 join 函數(shù)的作用。


join的原理就是依次檢驗(yàn)線程池中的線程是否結(jié)束,沒有結(jié)束就阻塞直到線程結(jié)束,如果結(jié)束則跳轉(zhuǎn)執(zhí)行下一個(gè)線程的join函數(shù)。


先看看這個(gè):

1. 阻塞主進(jìn)程,專注于執(zhí)行多線程中的程序。

2. 多線程多join的情況下,依次執(zhí)行各線程的join方法,前頭一個(gè)結(jié)束了才能執(zhí)行后面一個(gè)。

3. 無參數(shù),則等待到該線程結(jié)束,才開始執(zhí)行下一個(gè)線程的join。

4. 參數(shù)timeout為線程的阻塞時(shí)間,如 timeout=2 就是罩著這個(gè)線程2s 以后,就不管他了,繼續(xù)執(zhí)行下面的代碼。


代碼示例:

# coding: utf-8

# 測(cè)試多線程中join的功能

import threading, time?

def doWaiting():?

? ? print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"?

? ? time.sleep(3)?

? ? print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n"

def doWaiting1():?

? ? print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"?

? ? time.sleep(8)?

? ? print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"?

tsk = []? ?

thread1 = threading.Thread(target = doWaiting)?

thread1.start()?

tsk.append(thread1)

thread2 = threading.Thread(target = doWaiting1)?

thread2.start()?

tsk.append(thread2)

print 'start join: ' + time.strftime('%H:%M:%S') + "\n"?

for tt in tsk:

? ? tt.join()

print 'end join: ' + time.strftime('%H:%M:%S') + "\n"

CASE1:

按照代碼示例中的代碼執(zhí)行。


執(zhí)行結(jié)果:

start waiting1: 00:39:03

start waiting2: 00:39:03

start join: 00:39:03

stop waiting1: 00:39:06

stop waiting2:? 00:39:11

end join: 00:39:11

[Finished in 8.0s]

執(zhí)行結(jié)果分析:

1. 兩個(gè)線程在同一時(shí)間開啟,join 函數(shù)執(zhí)行。

2. waiting1 線程執(zhí)行(等待)了3s 以后,結(jié)束。

3. waiting2 線程執(zhí)行(等待)了8s 以后,運(yùn)行結(jié)束。

4. join 函數(shù)(返回到了主進(jìn)程)執(zhí)行結(jié)束。


CASE2:

將 join 的參數(shù)改成2 即 tt.join(2)


執(zhí)行結(jié)果:

start waiting1: 00:45:32

start waiting2: 00:45:32

start join: 00:45:32

stop waiting1: 00:45:35

end join: 00:45:36

stop waiting2:? 00:45:40

[Finished in 8.0s]

執(zhí)行結(jié)果分析:

1. 兩個(gè)線程在同一時(shí)間開啟,join 函數(shù)執(zhí)行。

2. wating1 線程在執(zhí)行(等待)了三秒以后,完成。

3. join 退出(兩個(gè)2s,一共4s,36-32=4,無誤)。

4. waiting2 線程由于沒有在 join 規(guī)定的等待時(shí)間內(nèi)(4s)完成,所以自己在后面執(zhí)行完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近自覺個(gè)人自由主義泛濫,愛國主義不足, 在網(wǎng)上一片沸騰的情況下決定去看戰(zhàn)狼2,以受教育,燃激情,重拾對(duì)祖國的熱愛...
    roronora閱讀 213評(píng)論 0 1
  • 昨天看了一篇公眾號(hào)的文章里面出現(xiàn)了一張這樣的圖,感觸非常的深。文章的內(nèi)容只是講老板喜歡善于填坑的員工,而文中提到的...
    回憶畫卷閱讀 495評(píng)論 0 0
  • 做個(gè)心中的女孩,熱愛生活,做著喜歡的事情,風(fēng)情萬種的性感。 清晰生活的實(shí)質(zhì),過著簡(jiǎn)單真誠的日子。愛的時(shí)候不辜負(fù)人,...
    嫻雅初心閱讀 366評(píng)論 0 0
  • 【朗朗的故事】 一自由行 好久沒跟團(tuán)旅游,第一次跟朗出省旅游,還是選了跟團(tuán)游。結(jié)果,上午各種不適應(yīng):拍照、購物還有...
    朗爸不懶閱讀 398評(píng)論 0 1

友情鏈接更多精彩內(nèi)容