停止或杀死python线程

时间:2017-12-02 17:58:38

标签: python

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

每次我发布一个帖子我给它一个ID

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

现在在主线程上,用户可能会要求停止并删除该线程。由于我发布了不同的线程,每个线程都有自己的slug_ID。

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

我想立即杀死这个帖子,我已经四处寻找,我发现了两种可能性:

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

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

1 个答案:

答案 0 :(得分:3)

Python不提供用于杀死线程的API,并且已经充分讨论了原因here。例如,Java用于公开杀死线程的特定方法,但很久以前就被删除了。

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

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