用绞死的线程退出python

时间:2016-11-28 12:22:17

标签: python

导入和使用包时,此包可以运行非守护程序线程。在这些线程完成之前,python无法正常退出(与sys.exit(0)一样)。例如,假设线程t来自某个包。当主线程中发生未处理的异常时,您希望终止。但是这不会立即退出,它将等待60秒直到线程终止。

import time, threading

def main():
    t = threading.Thread(target=time.sleep, args=(60,))
    t.start()

    a = 5 / 0

if __name__ == '__main__':
    try:
        main()
    except:
        sys.exit(1)

所以我想出了两件事。用os._exit(1)替换sys.exit(1)或枚举所有线程并使它们成为守护进程。它们似乎都有效,但你的情况更好吗? os._exit不会刷新stdio缓冲区,但是将守护进程属性设置为线程似乎是一个黑客攻击,也许它不能保证一直工作。

import time, threading

def main():
    t = thread.Thread(target=time.sleep, args=(60,))
    t.start()

    a = 5 / 0

if __name__ == '__main__':
    try:
        main()
    except:
        for t in threading.enumerate():
            if not t.daemon and t.name != "MainThread":
                t._daemonic = True

        sys.exit(1)

0 个答案:

没有答案