国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

淺談Python中threading join和setDaemon用法及區別說明

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

Python多線程編程時,經常會用到join()和setDaemon()方法,今天特地研究了一下兩者的區別。

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

原型:join([timeout])

里面的參數時可選的,代表線程運行的最大時間,即如果超過這個時間,不管這個此線程有沒有執行完畢都會被回收,然后主線程或函數都會接著執行的。

例子:

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

執行后的結果是:

0 1 2 3 4 999

機器上運行時,4和999之間,有明顯的停頓。

解釋:

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

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

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

執行后的結果是:

999 0 1 2 3 4

機器上運行時,999之前,有明顯的停頓。

解釋:

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

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

例子:就是設置子線程隨主線程的結束而結束:

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.'

執行后的結果是:

I am the father thread.

可以看出,子線程t1中的內容并未打出。

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

程序運行中,執行一個主線程,如果主線程又創建一個子線程,主線程和子線程就分兵兩路,分別運行,那么當主線程完成想退出時,會檢驗子線程是否完成。

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

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

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

以上這篇淺談Python中threading join和setDaemon用法及區別說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 99久久国产综合精品网成人影院 | 目韩一区二区三区系列片丶 | 精品小视频在线观看 | 国产精品九九视频 | 黄色毛片在线 | 888米奇在线视频四色 | 欧美a一级片 | 日本高清不卡中文字幕 | 欧美综合自拍亚洲综合百度 | 美女视频永久黄网站免费观看国产 | a级高清观看视频在线看 | 久久黄色免费网站 | 色网站在线观看 | 久久一日本道色综合久久m 久久伊人成人网 | 玖玖玖视频在线观看视频6 玖玖影院在线观看 | wwww.黄| 日韩亚洲一区中文字幕在线 | 我要看a级毛片 | 成人三级做爰在线观看男女 | 99久久精品免费看国产免费软件 | 99久久综合狠狠综合久久一区 | 特色黄色片 | 国产三级在线观看免费 | 国产美女在线精品亚洲二区 | 最刺激黄a大片免费网站 | 精品久久久久久久久久香蕉 | 亚洲天天看 | 亚洲成a人伦理 | 天干夜天天夜天干天ww | 久久久免费观成人影院 | 99爱在线视频 | 色婷婷色综合激情国产日韩 | 看三级网站 | 亚洲男人天堂2017 | 亚洲国产第一 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片99 | 久久tv免费国产高清 | 女人扒开双腿让男人捅 | 97午夜影院 | 日韩欧美在线视频一区二区 | 天天拍拍夜夜出水 |