繁体   English   中英

Python 3-打印回溯并在工作程序异常时停止执行

[英]Python 3 - print traceback and stop execution on worker exception

在我的应用程序中,我使用了多个工作线程和一个mainloop,这是外部模块的一部分,无法修改。 当辅助线程引发异常时,应用程序应停止主循环,进行一些清理,打印辅助异常回溯并退出。 应该通过引发ExitMainLoop异常来停止mainloop。

这是一个示例代码:

from time import sleep
from threading import Thread


class MyException(BaseException):
    pass


class ExitMainLoop(BaseException):
    pass


def main_loop():
    # this is a part of external module
    print('started main loop')
    try:
        while True:
            print('.')
            sleep(1)
    except ExitMainLoop:
        pass


def do_work():
    print('started worker thread')
    sleep(5)
    raise MyException


def main():
    worker = Thread(target=do_work)
    worker.daemon = True
    worker.start()
    main_loop()


if __name__ == '__main__':
    main()

编辑:我真正的问题是我的应用程序正在使用urwid库进行curses ui,所以我看不到工作程序异常。

我有一个奇怪的想法,也许可以。

   def kill(ex_cls, ex, tb):
       os.kill(os.getpid(), signal.SIGTERM)

    sys.excepthook = kill

当发生任何异常时,获取进程ID并杀死它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM