如何杀死python中的线程


问题内容

这个问题已经在这里有了答案

有什么办法可以杀死线程吗?
(27个答案)

4年前关闭。

我使用以下代码启动线程。

t = thread.start_new_thread(myfunction)

我如何杀死t另一个线程中的线程。因此,就代码而言,基本上,我希望能够做到这一点。

t.kill()

请注意,我正在使用Python 2.4。


问题答案:

如果您的线程正忙于执行Python代码,那么您将面临比无法杀死它更大的问题。
GIL将阻止其他任何线程运行您用来执行杀死操作的任何指令。
(经过一番研究,我了解到解释器会定期发布GIL,因此前面的声明是虚假的。但是,其余注释仍然有效。)

您的线程必须以协作方式编写。也就是说,它必须定期使用诸如信号量之类的信令对象进行检入,主线程可以使用该对象来指示工作线程自愿退出。

while not sema.acquire(False):
    # Do a small portion of work…

要么:

for item in work:
    # Keep working…
        # Somewhere deep in the bowels…
        if sema.acquire(False):
            thread.exit()