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

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

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

最近,在做一個項目時遇到的了一個問題,主線程無法捕獲子線程中拋出的異常。

先看一個線程類的定義

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

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

在主線程中,啟動這個線程類的一個對象時,這要聲明一個對象然后啟動就可以了,示例如下

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方法的棧因此無法捕獲到這一異常。

解決方法很簡單,就是通過設置一個線程是否異常退出的flag的成員變量,當線程異常退出時,對其作一標記。然后在主線程中檢查改線程運行結束后該標志位的值,如果異常,再通過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  # 如果線程異常退出,將該標志位設置為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) 

以上全部為本篇文章的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

    python global和nonlocal用法解析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    python實現(xiàn)智能語音天氣預報

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

最新評論

海口市| 元朗区| 威远县| 湛江市| 兴业县| 盐边县| 扶风县| 焦作市| 郴州市| 三都| 济源市| 通河县| 沛县| 兴安县| 天峻县| 方正县| 郓城县| 育儿| 九寨沟县| 常山县| 湛江市| 治县。| 枣阳市| 神农架林区| 临江市| 衡阳县| 武城县| 苏尼特右旗| 清镇市| 九江市| 施秉县| 简阳市| 桐乡市| 新巴尔虎右旗| 闽侯县| 吉安市| 清流县| 西和县| 名山县| 沁水县| 临桂县|