使用隐藏的 _stop() 函数终止线程有什么缺点?

What are the downsides of using the hidden _stop() function to kill a thread?

在寻找使用 Python 开箱即用的线程模块时快速终止线程的方法时,我遇到了这个方法:Use the Hidden _stop() Function to Kill a Thread in Python

_stop() 函数而不是 public 函数受到保护可能是有原因的。我的假设是,它使不安全地终止线程变得困难,但我很好奇是否还有其他原因。

调用 _stop() 终止线程有什么缺点?

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

        self._stop = threading.Event()

我觉得这毫无意义。

实际的私有 ._stop() 函数不会 停止线程。 threading.py 中没有任何东西可以这样做。相反,在 C 实现确定线程的生命周期 (已经)结束后,内部调用私有 ._stop() 函数以维护 Python-level 模块不变量。 user-level 代码调用它是没有意义的。

编辑:顺便说一句,在当前的 Python (>= 3.10) 中,在一个还活着的线程上调用 ._stop() 会立即死于 AssertionError,这就是它的唯一作用。我记得,在一些较旧的 Python 版本中,._stop() 继续破坏 threading.py 的一些内部结构(破坏了它对哪些线程实际上仍然存在的了解)。但是,在任何情况下,它都不会停止线程。