我对Python还比较陌生,想了解在以下情况下sys.exit()的行为:
主线程调用sys.exit(),但是有另一个非守护线程已经无限期地等待某个锁。
我在程序中测试过,看起来整个程序并没有退出。这是否是预期的行为?我不确定非守护线程是否处理了SystemExit异常,因为那是第三方库中的内容。
感谢您的帮助。
我对Python还比较陌生,想了解在以下情况下sys.exit()的行为:
主线程调用sys.exit(),但是有另一个非守护线程已经无限期地等待某个锁。
我在程序中测试过,看起来整个程序并没有退出。这是否是预期的行为?我不确定非守护线程是否处理了SystemExit异常,因为那是第三方库中的内容。
感谢您的帮助。
使用 threading
模块创建的线程,主线程会在退出时等待所有非守护进程线程结束。在 threading.py
中搜索 exitfunc
可以找到相关代码(已经验证适用于 Python 2.4.5、2.7.2 和 3.2.2 版本的源码)。
如果存在某些非守护进程线程正在等待锁,而您没有安排释放该锁的操作,则主线程在退出时将被挂起。
正如 Patrick 提到的那样,您可以使用 exit_
更直接地退出程序,但这将绕过所有清理函数,并且可能不适用于您的应用程序。