使用hidden_stop()函数终止线程有什么缺点



在使用Python的开箱即用线程模块寻找快速杀死线程的方法时,我遇到了这样的方法:在Python 中使用隐藏的_stop()函数杀死线程

_stop()函数受到保护而不是公开的原因大概是有原因的。我的假设是很难不安全地终止线程,但我很好奇是否还有其他原因。

调用_stop()来终止线程的缺点是什么?

链接到的代码根本不调用私有._stop()函数。相反,构造函数将其完全替换为Event:

self._stop = threading.Event()

这在我看来毫无意义。

实际的专用._stop()函数不会停止线程。threading.py中没有任何东西可以做到这一点。相反,在C实现确定线程的生命已经结束后,内部调用专用._stop()函数来维护Python级别的模块不变量。在任何情况下,用户级代码调用它都没有意义

EDIT:顺便说一句,在当前的Python(>=3.10(中,在一个活跃的线程上调用._stop()会立即用AssertionError消亡,这是它唯一的效果。我记得,在一些较旧的Python版本中,._stop()继续破坏了threading.py的一些内部(破坏了它对哪些线程实际上还活着的了解(。然而,在任何情况下,它都没有停止线程。