停止或杀死python线程

Stop or Kill python Thread

我有一个问题试图杀死或停止python中的线程,因为没有任何正式的api我试图找到一种方法来停止指定的线程而不杀死其他人。

每次我启动一个线程我给它一个ID

1
t = threading.Thread(name=slug_ID, target=function)

现在在主线程上,用户可能要求停止并删除该线程。由于我正在启动不同的线程,因此每个线程都有自己的slug_ID。

1
2
3
for thread in threading.enumerate():
    if (thread.getName()==slug_ID)):
        #thread.kill()

我想立即杀死线程,我搜索了周围,我找到了两种可能性:

  • 属性/标志:由于线程是循环的,我可以检查标志是否已被标记并返回它,不幸的是线程现在连续循环,例如,如果此时线程处于休眠状态,则不会立即死亡,而只是一次部分检查标志的代码,线程将死亡
  • 信号:当我在主线程上启动事件时,线程将捕获事件并优雅地退出,不幸的是我应该创建自定义信号以便仅停止我要杀死的特定线程,我想这样的事情:
1
2
3
4
5
try:
    while True:
        thread_do_stuff()
except Custom_signal:
    #exitThread

问题是我不知道如何包装和捕捉自定义信号,任何关于如何解决问题的想法?


Python没有提供用于杀死线程的API,这里有很好的讨论。 例如,Java用于公开杀死线程的特定方法,但很久以前就被删除了。

在Python中,信号仅在主线程中处理。 因此,你的第二种方法是行不通的。

如果您需要突然停止并发执行,唯一安全的方法是使用进程而不是线程。