2017-12-14 16 views
1

マルチプロセッサでカスタムsys.excepthookを設定しようとしています。 でも動作しません。Python sys.excepthook onマルチプロセス

以下のコードでは、エラーメッセージの接頭辞としてThis is my traceback function:文字列を出力することを期待していますが、そうではありません。

コード:

from multiprocessing import Process 
import time 
import traceback 
import logging 
import sys 

def excepthook(etype, evalue, traceback): 
    traceback_strs = traceback.format_exception_only(etype, evalue) 
    exception_str = "This is my traceback function:" + "\r\n".join(traceback_strs) 
    print("ExceptHook") 
    print(exception_str) 


def subprocess_main(): 
    sys.excepthook = excepthook 
    time.sleep(3) 
    raise Exception("HelloWorld") 


if __name__ == "__main__": 
    p = Process(target=subprocess_main) 
    p.start() 
    p.join() 

それが動作しないのはなぜ?あなたのフックの前に例外を消費キャッチされない例外がある場合3.6.3

答えて

2

sys.excepthookが呼び出されますが、Processhas exception handler routine、:

OS:Windows10
のPython。あなたはまだカスタム例外処理をしたい場合は

、あなたがProcess.runメソッドをオーバーライド可能性があります

class MyProcess(Process): 

    def run(self): 
     try: 
      super().run() 
     except Exception: 
      excepthook(*sys.exc_info()) 

PS:それは実際に呼び出されている場合は、エラーがトリガされます、あなたのオリジナルの機能excepthook影のモジュールオブジェクトtracebackの引数traceback

関連する問題