2017-12-14 6 views
1

Ich versuche, benutzerdefinierte sys.excepthook auf Multiprocess festzulegen. aber es funktioniert nicht.Python sys.excepthook auf multiprocess

Im unteren Code habe ich erwartet, dass This is my traceback function: Zeichenfolge als Präfix der Fehlermeldung gedruckt wird, aber es nicht.

Code:

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

Warum es nicht funktioniert?

OS: Microsoft Windows 10
Python: 3.6.3

Antwort

2

sys.excepthook genannt wird, wenn es eine abgefangene Ausnahme ist, sondern Processhas exception handler routine, die die Ausnahme, bevor Sie Ihren Haken verbraucht.

Wenn Sie noch benutzerdefinierte Ausnahmebehandlung möchten, können Sie Process.run Methode außer Kraft gesetzt:

class MyProcess(Process): 

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

ps: Argument traceback Ihrer ursprünglichen Funktion excepthook beschatteten Modulobjekt traceback, die einen Fehler auslösen, wenn es tatsächlich aufgerufen wird.

Verwandte Themen