最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python主線程捕獲子線程的方法

 更新時(shí)間:2018年06月17日 08:20:33   作者:湯姆維賽迪  
這篇文章主要為大家詳細(xì)介紹了python主線程捕獲子線程的方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下

最近,在做一個(gè)項(xiàng)目時(shí)遇到的了一個(gè)問題,主線程無法捕獲子線程中拋出的異常。

先看一個(gè)線程類的定義

''''' 
Created on Oct 27, 2015 
 
@author: wujz 
''' 
import threading 
 
class runScriptThread(threading.Thread): 
 def __init__(self, funcName, *args): 
  threading.Thread.__init__(self) 
  self.args = args 
  self.funcName = funcName 
  
 def run(self): 
  try: 
   self.funcName(*(self.args)) 
  except Exception as e: 
   raise e 

很簡(jiǎn)單,傳入要調(diào)用的方法,并啟用一個(gè)新的線程來運(yùn)行這個(gè)方法。

在主線程中,啟動(dòng)這個(gè)線程類的一個(gè)對(duì)象時(shí),這要聲明一個(gè)對(duì)象然后啟動(dòng)就可以了,示例如下

import runScriptThread,traceback 
 
if __name__=='__main__': 
 sth = 'hello world' 
 try: 
  aChildThread = runScriptThread(printSth, sth) 
  aChildThread.start() 
  aChildThread.join() 
 except Exception as e: 
  print(str(traceback.format_exc())) 

但是這樣的代碼,main方法中無法捕獲子線程中的異常,原因在于start()方法將為子線程開辟一條新的棧,main方法的棧因此無法捕獲到這一異常。

解決方法很簡(jiǎn)單,就是通過設(shè)置一個(gè)線程是否異常退出的flag的成員變量,當(dāng)線程異常退出時(shí),對(duì)其作一標(biāo)記。然后在主線程中檢查改線程運(yùn)行結(jié)束后該標(biāo)志位的值,如果異常,再通過sys和traceback回溯異常信息,然后拋出即可。改寫后的異常類:

''''' 
Created on Oct 27, 2015 
 
@author: wujz 
''' 
import threading,traceback,sys 
 
class runScriptThread(threading.Thread): #The timer class is derived from the class threading.Thread 
 def __init__(self, funcName, *args): 
  threading.Thread.__init__(self) 
  self.args = args 
  self.funcName = funcName 
  self.exitcode = 0 
  self.exception = None 
  self.exc_traceback = '' 
  
 def run(self): #Overwrite run() method, put what you want the thread do here 
  try: 
   self._run() 
  except Exception as e: 
   self.exitcode = 1  # 如果線程異常退出,將該標(biāo)志位設(shè)置為1,正常退出為0 
   self.exception = e 
   self.exc_traceback = ''.join(traceback.format_exception(*sys.exc_info())) #在改成員變量中記錄異常信息 
  
 def _run(self): 
  try: 
   self.funcName(*(self.args)) 
  except Exception as e: 
   raise e 

改寫后的主線程:

import runScriptThread,traceback 
 
if __name__=='__main__': 
 sth = 'hello world' 
 try: 
  aChildThread = runScriptThread(printSth, sth) 
  aChildThread.start() 
  aChildThread.join() 
 except Exception as e: 
  print(aChildThread.exc_traceback) 

以上全部為本篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas分組聚合之使用自定義函數(shù)方法transform()、apply()

    Pandas分組聚合之使用自定義函數(shù)方法transform()、apply()

    Pandas具有很多強(qiáng)大的功能,transform就是其中之一,利用它可以高效地匯總數(shù)據(jù)且不改變數(shù)據(jù)行數(shù),下面這篇文章主要給大家介紹了關(guān)于Pandas分組聚合之使用自定義函數(shù)方法transform()、apply()的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • python global和nonlocal用法解析

    python global和nonlocal用法解析

    這篇文章主要介紹了python global和nonlocal用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python如何通過正則匹配指定字符開頭與結(jié)束提取中間內(nèi)容

    python如何通過正則匹配指定字符開頭與結(jié)束提取中間內(nèi)容

    這篇文章主要介紹了python通過正則匹配指定字符開頭與結(jié)束提取中間內(nèi)容的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Python pandas入門系列之眾數(shù)和分位數(shù)

    Python pandas入門系列之眾數(shù)和分位數(shù)

    分位數(shù)(Quantile),也稱分位點(diǎn),是指將一個(gè)隨機(jī)變量的概率分布范圍分為幾個(gè)等份的數(shù)值點(diǎn),分析其數(shù)據(jù)變量的趨勢(shì),而眾數(shù)(Mode)是代表數(shù)據(jù)的一般水平,這篇文章主要給大家介紹了Python pandas系列之眾數(shù)和分位數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python利用函數(shù)式編程實(shí)現(xiàn)優(yōu)化代碼

    Python利用函數(shù)式編程實(shí)現(xiàn)優(yōu)化代碼

    函數(shù)式編程(Functional Programming)是一種編程范式,它將計(jì)算視為函數(shù)的求值,并且避免使用可變狀態(tài)和循環(huán),在Python中還可以利用它的簡(jiǎn)潔和高效來解決實(shí)際問題,下面我們就來學(xué)習(xí)一下它的具體用法吧
    2023-11-11
  • python異常觸發(fā)及自定義異常類解析

    python異常觸發(fā)及自定義異常類解析

    這篇文章主要介紹了python異常觸發(fā)及自定義異常類解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python?哈希表的實(shí)現(xiàn)——字典詳解

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

    這篇文章主要介紹了Python?哈希表的實(shí)現(xiàn)——字典,那么今天我們就來看看哈希表的原理以及如何實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的?Python?哈希表,需要的朋友可以參考下
    2023-11-11
  • 使用Python?VTK?完成圖像切割

    使用Python?VTK?完成圖像切割

    這篇文章主要介紹了使用Python?VTK?完成圖像切割,文章內(nèi)容基于python的相關(guān)資料展開對(duì)主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Python2.x利用commands模塊執(zhí)行Linux shell命令

    Python2.x利用commands模塊執(zhí)行Linux shell命令

    這篇文章主要介紹了Python2.x利用commands模塊執(zhí)行Linux shell命令 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python實(shí)現(xiàn)智能語音天氣預(yù)報(bào)

    python實(shí)現(xiàn)智能語音天氣預(yù)報(bào)

    今天小編就為大家分享一篇python實(shí)現(xiàn)智能語音天氣預(yù)報(bào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論

和田市| 北宁市| 谷城县| 岗巴县| 济宁市| 扎兰屯市| 兴山县| 延边| 宽甸| 宾阳县| 镇雄县| 资兴市| 民丰县| 翁牛特旗| 永平县| 大洼县| 嫩江县| 石城县| 蓝山县| 廊坊市| 苍南县| 漯河市| 车险| 云浮市| 修文县| 安图县| 宁强县| 东方市| 青浦区| 华容县| 铅山县| 麻城市| 沙洋县| 朝阳县| 漠河县| 承德市| 柳江县| 兰溪市| 东兰县| 肥西县| 巧家县|