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中,信号仅在主线程中处理。 因此,你的第二种方法是行不通的。
如果您需要突然停止并发执行,唯一安全的方法是使用进程而不是线程。