亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Python中threading join和setDaemon用法及區(qū)別說明

瀏覽:27日期:2022-07-26 16:58:27

Python多線程編程時(shí),經(jīng)常會(huì)用到j(luò)oin()和setDaemon()方法,今天特地研究了一下兩者的區(qū)別。

1、join ()方法:主線程A中,創(chuàng)建了子線程B,并且在主線程A中調(diào)用了B.join(),那么,主線程A會(huì)在調(diào)用的地方等待,直到子線程B完成操作后,才可以接著往下執(zhí)行,那么在調(diào)用這個(gè)線程時(shí)可以使用被調(diào)用線程的join方法。

原型:join([timeout])

里面的參數(shù)時(shí)可選的,代表線程運(yùn)行的最大時(shí)間,即如果超過這個(gè)時(shí)間,不管這個(gè)此線程有沒有執(zhí)行完畢都會(huì)被回收,然后主線程或函數(shù)都會(huì)接著執(zhí)行的。

例子:

import threading import time class MyThread(threading.Thread): def __init__(self,id): threading.Thread.__init__(self) self.id = id def run(self): x = 0 time.sleep(10) print self.id if __name__ == '__main__': t1=MyThread(999) t1.start() for i in range(5): print I

執(zhí)行后的結(jié)果是:

0 1 2 3 4 999

機(jī)器上運(yùn)行時(shí),4和999之間,有明顯的停頓。

解釋:

線程t1 start后,主線程并沒有等線程t1運(yùn)行結(jié)束后再執(zhí)行,而是先把5次循環(huán)打印執(zhí)行完畢(打印到4),然后sleep(10)后,線程t1把傳進(jìn)去的999才打印出來。

現(xiàn)在,我們把join()方法加進(jìn)去(其他代碼不變),看看有什么不一樣,例子:

import threading import time class MyThread(threading.Thread): def __init__(self,id): threading.Thread.__init__(self) self.id = id def run(self): x = 0 time.sleep(10) print self.id if __name__ == '__main__': t1=MyThread(999) t1.start() t1.join() for i in range(5): print I

執(zhí)行后的結(jié)果是:

999 0 1 2 3 4

機(jī)器上運(yùn)行時(shí),999之前,有明顯的停頓。

解釋:

線程t1 start后,主線程停在了join()方法處,等sleep(10)后,線程t1操作結(jié)束被join,接著,主線程繼續(xù)循環(huán)打印。

2、setDaemon()方法。主線程A中,創(chuàng)建了子線程B,并且在主線程A中調(diào)用了B.setDaemon(),這個(gè)的意思是,把主線程A設(shè)置為守護(hù)線程,這時(shí)候,要是主線程A執(zhí)行結(jié)束了,就不管子線程B是否完成,一并和主線程A退出.這就是setDaemon方法的含義,這基本和join是相反的。此外,還有個(gè)要特別注意的:必須在start() 方法調(diào)用之前設(shè)置,如果不設(shè)置為守護(hù)線程,程序會(huì)被無限掛起。

例子:就是設(shè)置子線程隨主線程的結(jié)束而結(jié)束:

import threading import time class MyThread(threading.Thread): def __init__(self,id): threading.Thread.__init__(self) def run(self): time.sleep(5) print 'This is ' + self.getName() if __name__ == '__main__': t1=MyThread(999) t1.setDaemon(True) t1.start() print 'I am the father thread.'

執(zhí)行后的結(jié)果是:

I am the father thread.

可以看出,子線程t1中的內(nèi)容并未打出。

解釋:t1.setDaemon(True)的操作,將父線程設(shè)置為了守護(hù)線程。根據(jù)setDaemon()方法的含義,父線程打印內(nèi)容后便結(jié)束了,不管子線程是否執(zhí)行完畢了。

程序運(yùn)行中,執(zhí)行一個(gè)主線程,如果主線程又創(chuàng)建一個(gè)子線程,主線程和子線程就分兵兩路,分別運(yùn)行,那么當(dāng)主線程完成想退出時(shí),會(huì)檢驗(yàn)子線程是否完成。

如果子線程未完成,則主線程會(huì)等待子線程完成后再退出。

但是有時(shí)候我們需要的是,只要主線程完成了,不管子線程是否完成,都要和主線程一起退出,這時(shí)就可以用setDaemon方法了。

所以,join和setDaemon的區(qū)別如上述的例子,它們基本是相反的。

以上這篇淺談Python中threading join和setDaemon用法及區(qū)別說明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 人摸人操 | 亚洲精品无码不卡 | 欧美xxxx成人免费网站 | 国产日韩免费 | 在线精品亚洲欧洲第一页 | 国产精品极品 | 中文字幕 亚洲 一区二区三区 | 国产精品久久久久久免费 | 国内精品久久久久影院老司 | 国产精品拍拍拍福利在线观看 | 一级一级 a爱片免费视频 | 国产精品亚洲精品日韩已满 | 国产午夜a理论毛片在线影院 | 黄色三级视频网站 | 性刺激免费视频观看在线观看 | 亚洲精品一区二区三区中文字幕 | 怡红院在线视频观看 | 欧美一级毛片免费看高清 | 亚洲欧美94色 | 日韩国产在线 | 亚洲爆爽 | 中文字幕国产亚洲 | 日韩亚洲一区二区三区 | 手机在线看片国产日韩生活片 | 精品女厕沟底拍撒尿 | 亚洲人成网站色7799在线观看 | 国产一区二区精品在线观看 | 女人张开腿让男人捅爽 | 国产精品日本不卡一区二区 | 日本一级特黄毛片高清视频 | 一区二区三区四区五区六区 | 97精品国产91久久久久久 | 久久久久久久91精品免费观看 | 欧美色欧美色 | 久久久久久久亚洲精品一区 | 国产成人爱片免费观看视频 | 久爱综合 | 99久久99久久久精品久久 | 免费日本在线视频 | 免费国产高清精品一区在线 | 亚洲欧美日韩精品久久亚洲区色播 |