如果您的线程正忙于执行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()