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

时间:2013-09-11 15:44:48

标签: python python-3.x python-multithreading

在我的应用程序中,我使用了几个工作线程和一个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库来诅咒ui所以我看不到工作者异常。

1 个答案:

答案 0 :(得分:0)

我有一个奇怪的想法,可能会工作。

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

    sys.excepthook = kill

发生任何异常时获取进程ID并将其终止。