在Python中杀死特定线程

在Python中杀死特定线程,python,multithreading,class,function,Python,Multithreading,Class,Function,有没有办法用Python杀死特定线程?我有一个线程运行一个循环函数,它会干扰程序的其他部分。我需要在某个函数启动时终止它,有什么方法可以做到这一点吗?最好的方法是使用线程定期检查的退出标志,如果设置了,则退出。当需要终止线程时,可以设置此标志并等待线程自行退出 提供了关于为什么强制终止线程是一个坏主意的其他信息,以及上述方法的Python实现。我发现,如果使用self.flag变量定义线程类,并将调用的函数设为该类的函数,然后,您可以在特定于线程的实例上设置该标志,并使用if语句退出特定于线程的

有没有办法用Python杀死特定线程?我有一个线程运行一个循环函数,它会干扰程序的其他部分。我需要在某个函数启动时终止它,有什么方法可以做到这一点吗?

最好的方法是使用线程定期检查的退出标志,如果设置了,则退出。当需要终止线程时,可以设置此标志并等待线程自行退出


提供了关于为什么强制终止线程是一个坏主意的其他信息,以及上述方法的Python实现。

我发现,如果使用
self.flag
变量定义线程类,并将调用的函数设为该类的函数,然后,您可以在特定于线程的实例上设置该标志,并使用if语句退出特定于线程的线程

不难想象这会更加动态,并允许生成和关闭线程

class AutoPilotThreader(threading.Thread):
    def __init__(self, threadID, name):
      threading.Thread.__init__(self)
      self.threadID = threadID
      self.name = name
      self.flag = 0
    def run(self):
      print "Starting " + self.name
      self.SelTestRun()
      print "Exiting " + self.name

    def SelTestRun(self):
        # do code
        while 1:
            if self.flag:
                return
            else:
                time.sleep(1)


my_threads = []
t1 = AutoPilotThreader(1, "t1")
t2 = AutoPilotThreader(2, "t2")
t1.start()
t2.start()
my_threads.append(t1)
my_threads.append(t2)


while 1:
    print("What would you like to do: 1. Quit 2. Start New 3. Check")
    choice = input("Enter : ")
    if choice == 1:
        choice = input(" 1 or 2 or 3 ")
        if choice == 1:
            t1.flag = 1
        elif choice ==2:
            t2.flag = 1
        elif choice ==3:
            t3.flag = 1  .........

如果为了程序正常运行而必须终止线程,则说明您做了一些非常错误的事情。让循环周期性地检查一些布尔变量,让它成为
继续
。在主线程中,设置另一个线程应该停止时的
procedure=False
;它将在下一次迭代时停止。您能更详细地描述这个问题吗?也许有更好的解决办法。我的意思是肯定有一个更好的解决方案,而不仅仅是终止线程。但是,也许您可以使用threading.Lock()对象来解决问题