[英]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.