中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么在python中利用主線程捕獲子線程

發布時間:2021-04-30 17:00:58 來源:億速云 閱讀:241 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在python中利用主線程捕獲子線程,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

python主要應用領域有哪些

1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。

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

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

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

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)

以上就是怎么在python中利用主線程捕獲子線程,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

习水县| 黎城县| 黔西县| 共和县| 儋州市| 霍邱县| 高雄县| 安化县| 龙游县| 石阡县| 林周县| 宁城县| 上犹县| 襄樊市| 江油市| 申扎县| 秦安县| 金塔县| 玉门市| 安岳县| 蕉岭县| 宜黄县| 庆元县| 南昌县| 鄂托克前旗| 晴隆县| 大新县| 五常市| 车险| 玉溪市| 枣庄市| 辽阳县| 石渠县| 樟树市| 云林县| 株洲市| 石台县| 信阳市| 会宁县| 南郑县| 泽州县|