当一个非守护线程无限期等待锁时,Python的sys.exit行为

5

我对Python还比较陌生,想了解在以下情况下sys.exit()的行为:

主线程调用sys.exit(),但是有另一个非守护线程已经无限期地等待某个锁。

我在程序中测试过,看起来整个程序并没有退出。这是否是预期的行为?我不确定非守护线程是否处理了SystemExit异常,因为那是第三方库中的内容。

感谢您的帮助。


1
也许如果您以不同的方式退出程序,就像这样:https://dev59.com/-3VC5IYBdhLWcg3w1Etq,可以避免SystemExit异常的抛出。 - cptPH
1个回答

5

使用 threading 模块创建的线程,主线程会在退出时等待所有非守护进程线程结束。在 threading.py 中搜索 exitfunc 可以找到相关代码(已经验证适用于 Python 2.4.5、2.7.2 和 3.2.2 版本的源码)。

如果存在某些非守护进程线程正在等待锁,而您没有安排释放该锁的操作,则主线程在退出时将被挂起。

正如 Patrick 提到的那样,您可以使用 exit_ 更直接地退出程序,但这将绕过所有清理函数,并且可能不适用于您的应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接