欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例

 更新時(shí)間:2020年05月02日 09:27:49   作者:福斯基  
這篇文章主要介紹了判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

新寫(xiě)自己的Threading類(lèi)

class MyThread(threading.Thread):#我的Thread類(lèi) 判斷流程結(jié)束沒(méi) 用于os shell命令是否執(zhí)行判斷
 def __init__(self,func = ""):#輸入待執(zhí)行函數(shù)名 我執(zhí)行的函數(shù)沒(méi)有參數(shù)就沒(méi)有加args輸入了
 threading.Thread.__init__(self)
 self.func = func
 self.result = 1#未完成為1 標(biāo)志位
 # 調(diào)用start自動(dòng)執(zhí)行的函數(shù)
 def run(self):
 self.result = self.func()
 self.result = 0#完成返回0

然后執(zhí)行

class MyThread(threading.Thread):#我的Thread類(lèi) 判斷流程結(jié)束沒(méi) 用于os shell命令是否執(zhí)行判斷
 def __init__(self,func = ""):#輸入待執(zhí)行函數(shù)名 我執(zhí)行的函數(shù)沒(méi)有參數(shù)就沒(méi)有加args輸入了
 threading.Thread.__init__(self)
 self.func = func
 self.result = 1#未完成為1 標(biāo)志位
 # 調(diào)用start自動(dòng)執(zhí)行的函數(shù)
 def run(self):
 self.result = self.func()
 self.result = 0#完成返回0

這樣就可以判斷os.sysytem里語(yǔ)句是否執(zhí)行完成是否

補(bǔ)充知識(shí):python的threading.Thread線(xiàn)程的start、run、join、setDaemon

Pycharm整體看下Thread類(lèi)的內(nèi)容:模擬的是Java的線(xiàn)程模型

表示方法method,上面的鎖頭表示這個(gè)是類(lèi)內(nèi)部的方法,從方法名字命名規(guī)范可以看出,都是_和__開(kāi)頭的,一個(gè)下劃線(xiàn)表示是子類(lèi)可以繼承,兩個(gè)下劃線(xiàn)表示是只有Thread內(nèi)部可以訪(fǎng)問(wèn),子類(lèi)都不可以訪(fǎng)問(wèn)。

表示property,可以使用類(lèi)直接訪(fǎng)問(wèn):Thread._block

表示field,就是self.x定義的東東

表示變量variable

name/getName/setName是線(xiàn)程名字有關(guān)的;

isDaemon是否是守護(hù)進(jìn)程

setDaemon設(shè)置為守護(hù)進(jìn)程,如果把調(diào)用線(xiàn)程設(shè)置為守護(hù)線(xiàn)程,那么等調(diào)用線(xiàn)程結(jié)束后,被調(diào)用的子線(xiàn)程結(jié)束與否都會(huì)隨著守護(hù)線(xiàn)程結(jié)束

isAlive線(xiàn)程是否是活動(dòng)狀態(tài)

start方法開(kāi)啟一個(gè)新線(xiàn)程。把需要并行處理的代碼放在run()方法中,start()方法啟動(dòng)線(xiàn)程將自動(dòng)調(diào)用 run()方法。

run線(xiàn)程實(shí)際在運(yùn)行的內(nèi)容,可以被子類(lèi)繼承和重寫(xiě)overide。

join阻塞調(diào)用它的線(xiàn)程,直到等待被調(diào)用的線(xiàn)程運(yùn)行結(jié)束,其實(shí)就變成了單線(xiàn)程。參數(shù)timeout的作用是,當(dāng)前線(xiàn)程等待被調(diào)用的子線(xiàn)程的時(shí)間,如果時(shí)間到了,不管子線(xiàn)程是否結(jié)束,當(dāng)前線(xiàn)程都進(jìn)入就緒狀態(tài),重新等待CPU調(diào)度。

Join方法的Java示例:

新建一個(gè)Thread類(lèi),重寫(xiě)run()方法:

public class MyThread extends Thread {

 @Override
 public void run() {
  System.out.println("子線(xiàn)程執(zhí)行完畢");
 }
}

新建測(cè)試類(lèi),測(cè)試Join()方法:

public class TestThread {

 public static void main(String[] args) {
  //循環(huán)五次
  for (int i = 0; i < 5; i++) {

   MyThread thread = new MyThread();
   //啟動(dòng)線(xiàn)程
   thread.start();
   try {
    //調(diào)用join()方法
    thread.join();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("主線(xiàn)程執(zhí)行完畢");
   System.out.println("~~~~~~~~~~~~~~~");

  }
 }
}

輸出結(jié)果如下:

子線(xiàn)程執(zhí)行完畢
主線(xiàn)程執(zhí)行完畢
~~~~~~~~~~~~~~~
子線(xiàn)程執(zhí)行完畢
主線(xiàn)程執(zhí)行完畢
~~~~~~~~~~~~~~~
子線(xiàn)程執(zhí)行完畢
主線(xiàn)程執(zhí)行完畢
~~~~~~~~~~~~~~~
子線(xiàn)程執(zhí)行完畢
主線(xiàn)程執(zhí)行完畢
~~~~~~~~~~~~~~~
子線(xiàn)程執(zhí)行完畢
主線(xiàn)程執(zhí)行完畢
~~~~~~~~~~~~~~~

結(jié)果分析: 子線(xiàn)程每次都在主線(xiàn)程之前執(zhí)行完畢,即子線(xiàn)程會(huì)在主線(xiàn)程之前執(zhí)行。

什么時(shí)候用join()方法?  

在很多情況下,主線(xiàn)程生成并起動(dòng)了子線(xiàn)程,如果子線(xiàn)程里要進(jìn)行大量的耗時(shí)的運(yùn)算,主線(xiàn)程往往將于子線(xiàn)程之前結(jié)束,但是如果主線(xiàn)程處理完其他的事務(wù)后,需要用到子線(xiàn)程的處理結(jié)果,也就是主線(xiàn)程需要等待子線(xiàn)程執(zhí)行完成之后再結(jié)束,這個(gè)時(shí)候就要用到j(luò)oin()方法了。

用start方法來(lái)啟動(dòng)線(xiàn)程,真正實(shí)現(xiàn)了多線(xiàn)程運(yùn)行,這時(shí)無(wú)需等待run方法體代碼執(zhí)行完畢而直接繼續(xù)執(zhí)行下面的代碼。通過(guò)調(diào)用Thread類(lèi)的start()方法來(lái)啟動(dòng)一個(gè)線(xiàn)程,這時(shí)此線(xiàn)程處于就緒(可運(yùn)行)狀態(tài),并沒(méi)有運(yùn)行,一旦得到cpu時(shí)間片,就開(kāi)始執(zhí)行run()方法,這里方法 run()稱(chēng)為線(xiàn)程體,它包含了要執(zhí)行的這個(gè)線(xiàn)程的內(nèi)容,run方法運(yùn)行結(jié)束,此線(xiàn)程隨即終止?! ?/p>

run()方法只是類(lèi)的一個(gè)普通方法而已,如果直接調(diào)用Run方法,程序中依然只有主線(xiàn)程這一個(gè)線(xiàn)程,其程序執(zhí)行路徑還是只有一條,還是要順序執(zhí)行,還是要等待run方法體執(zhí)行完畢后才可繼續(xù)執(zhí)行下面的代碼,這樣就沒(méi)有達(dá)到寫(xiě)線(xiàn)程的目的。

總結(jié):調(diào)用start方法方可啟動(dòng)線(xiàn)程,而run方法只是thread的一個(gè)普通方法調(diào)用,還是在主線(xiàn)程里執(zhí)行。把需要并行處理的代碼放在run()方法中,start()方法啟動(dòng)線(xiàn)程將自動(dòng)調(diào)用 run()方法

可見(jiàn)join和setDaemon作用是相反的,一個(gè)是等待子線(xiàn)程結(jié)束,一個(gè)是不等到子線(xiàn)程結(jié)束,有可能把子線(xiàn)程強(qiáng)制結(jié)束。如果兩個(gè)都不設(shè)置的時(shí)候,那么主線(xiàn)程和子線(xiàn)程各自運(yùn)行各自的,互不干擾,誰(shuí)結(jié)束都不會(huì)影響另一個(gè)運(yùn)行情況:見(jiàn)http://www.dbjr.com.cn/article/185872.htm示例

以上這篇判斷Threading.start新線(xiàn)程是否執(zhí)行完畢的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python自動(dòng)化測(cè)試框架之unittest使用詳解

    Python自動(dòng)化測(cè)試框架之unittest使用詳解

    unittest是Python自動(dòng)化測(cè)試框架之一,提供了一系列測(cè)試工具和接口,支持單元測(cè)試、功能測(cè)試、集成測(cè)試等多種測(cè)試類(lèi)型。unittest使用面向?qū)ο蟮乃枷雽?shí)現(xiàn)測(cè)試用例的編寫(xiě)和管理,可以方便地?cái)U(kuò)展和定制測(cè)試框架,支持多種測(cè)試結(jié)果輸出格式
    2023-04-04
  • Python在Excel中添加數(shù)據(jù)條的代碼詳解

    Python在Excel中添加數(shù)據(jù)條的代碼詳解

    在Excel中添加數(shù)據(jù)條是一種數(shù)據(jù)可視化技巧,它通過(guò)條形圖的形式在單元格內(nèi)直觀(guān)展示數(shù)值的大小,尤其適合比較同一列或行中各個(gè)單元格的數(shù)值,本文將介紹如何使用Python在Excel中的指定單元格區(qū)域添加數(shù)據(jù)條,需要的朋友可以參考下
    2024-10-10
  • Python函數(shù)基礎(chǔ)

    Python函數(shù)基礎(chǔ)

    這篇文章主要從函數(shù)開(kāi)始介紹展開(kāi)Python函數(shù),以最基本的函數(shù)定義方法描述,需要的朋友可以參考下文簡(jiǎn)單的介紹
    2021-08-08
  • Python入門(mén)篇之字符串

    Python入門(mén)篇之字符串

    可能大多數(shù)人在學(xué)習(xí)C語(yǔ)言的時(shí)候,最先接觸的數(shù)據(jù)類(lèi)型就是字符串,因?yàn)榇蠖嘟坛潭际且?quot;Hello world"這個(gè)程序作為入門(mén)程序,這個(gè)程序中要打印的"Hello world"就是字符串。今天我們來(lái)了解一下Python中的字符串,看看它的用法。
    2014-10-10
  • Python實(shí)現(xiàn)批量繪制遙感影像數(shù)據(jù)的直方圖

    Python實(shí)現(xiàn)批量繪制遙感影像數(shù)據(jù)的直方圖

    這篇文章主要為大家詳細(xì)介紹了如何基于Python中g(shù)dal模塊,實(shí)現(xiàn)對(duì)大量柵格圖像批量繪制直方圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • python中的二維列表實(shí)例詳解

    python中的二維列表實(shí)例詳解

    這篇文章主要介紹了python中的二維列表實(shí)例詳解,文中給大家介紹了python 二維列表按列取元素的方法,需要的朋友可以參考下
    2018-06-06
  • Python?哈希表的實(shí)現(xiàn)——字典詳解

    Python?哈希表的實(shí)現(xiàn)——字典詳解

    這篇文章主要介紹了Python?哈希表的實(shí)現(xiàn)——字典,那么今天我們就來(lái)看看哈希表的原理以及如何實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的?Python?哈希表,需要的朋友可以參考下
    2023-11-11
  • Python中zip()函數(shù)的簡(jiǎn)單用法舉例

    Python中zip()函數(shù)的簡(jiǎn)單用法舉例

    這篇文章主要給大家介紹了關(guān)于Python中zip()函數(shù)的簡(jiǎn)單用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框

    python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框

    這篇文章主要介紹了python快速進(jìn)階利用Tkinter定制一個(gè)信息提示框,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • python3+PyQt5+Qt Designer實(shí)現(xiàn)界面可視化

    python3+PyQt5+Qt Designer實(shí)現(xiàn)界面可視化

    本文主要介紹了python3+PyQt5+Qt Designer實(shí)現(xiàn)界面可視化,Qt Designer,用鼠標(biāo)拖拖就能完成窗體設(shè)計(jì),感興趣的可以了解一下
    2021-06-06

最新評(píng)論