Ver Fonte

dump current stack traces when exiting with SIGINT

AUTOMATIC1111 há 2 anos atrás
pai
commit
e8a9d213e4
1 ficheiros alterados com 19 adições e 0 exclusões
  1. 19 0
      modules/initialize_util.py

+ 19 - 0
modules/initialize_util.py

@@ -132,10 +132,29 @@ def get_gradio_auth_creds():
                         yield cred
                         yield cred
 
 
 
 
+def dumpstacks():
+    import threading
+    import traceback
+
+    id2name = {th.ident: th.name for th in threading.enumerate()}
+    code = []
+    for threadId, stack in sys._current_frames().items():
+        code.append(f"\n# Thread: {id2name.get(threadId, '')}({threadId})")
+        for filename, lineno, name, line in traceback.extract_stack(stack):
+            code.append(f"""File: "{filename}", line {lineno}, in {name}""")
+            if line:
+                code.append("  " + line.strip())
+
+    print("\n".join(code))
+
+
 def configure_sigint_handler():
 def configure_sigint_handler():
     # make the program just exit at ctrl+c without waiting for anything
     # make the program just exit at ctrl+c without waiting for anything
     def sigint_handler(sig, frame):
     def sigint_handler(sig, frame):
         print(f'Interrupted with signal {sig} in {frame}')
         print(f'Interrupted with signal {sig} in {frame}')
+
+        dumpstacks()
+
         os._exit(0)
         os._exit(0)
 
 
     if not os.environ.get("COVERAGE_RUN"):
     if not os.environ.get("COVERAGE_RUN"):