91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中threading join和setDaemon有什么區別

發布時間:2020-07-29 13:24:06 來源:億速云 閱讀:149 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了Python中threading join和setDaemon有什么區別,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

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有什么區別的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴川市| 通州区| 休宁县| 比如县| 巴青县| 礼泉县| 唐山市| 高清| 昭通市| 会理县| 沅陵县| 张家界市| 宝坻区| 得荣县| 辽阳市| 玛多县| 华安县| 南投市| 公主岭市| 德庆县| 凤翔县| 沙雅县| 锡林浩特市| 肥东县| 普格县| 随州市| 涪陵区| 阳朔县| 宁阳县| 建始县| 漳浦县| 巴林左旗| 马公市| 荔波县| 安丘市| 安岳县| 田林县| 巴林右旗| 新源县| 古蔺县| 台东市|