キャプチャのpythonメソッド子スレッドのメインスレッド

この記事では、いくつかの基準値と、メインスレッドの子スレッドより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

非常に単純な、呼び出すメソッドを渡し、この方法を実行するために、新しいスレッドを有効にします。

メインスレッドでは、スレッドオブジェクトは、クラスを起動したとき、それはオブジェクトを宣言し、それを再起動する必要があり、次の例であり、

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()メソッドは、新しいサブスレッドスタックを開きますので、スタックが例外を捕捉するための主要な方法であることができない、例外サブスレッドをキャッチすることはできません。
溶液は、スレッドが終了異常、それがマークした場合、異常終了であるメンバ変数のスレッドフラグを設定することによってである、単純です。次に、異常であれば、異常情報、実行フラグのねじ端部のメインスレッドの変化の値をチェックし、再度SYSおよびトレースバックを介して、およびスローすることができます。書き換えられた例外クラス:

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

774711191、高齢者が学んでいる方法を見て:私たちは、Pythonのバックルqunを学ぶお勧めします!基本的なWeb開発Pythonスクリプトからなど、爬虫類、ジャンゴ、データマイニング、へ[PDF、実際のソースコード]、ゼロベースのプロジェクトの戦闘データに仕上げています。どんな小さなPythonのパートナーに与えられました!毎日、ダニエルは上をクリックし、私たちが参加し、いくつかの学習方法と細部への注意を払う必要性を共有するために、タイミングPythonの技術を説明集める学習者のpython
上記のすべては、この記事の内容全体で、私たちは助け学習したいです

公開された35元の記事 ウォンの賞賛9 ビュー10000 +

おすすめ

転載: blog.csdn.net/haoxun02/article/details/104254674