杀死一个特定的线程Python

问题描述:

有没有办法用Python杀死一个特定的线程?我有一个线程运行一个循环的函数,它干扰了程序的其他部分。当某个功能开始时,我需要杀死它,有没有办法做到这一点?杀死一个特定的线程Python

+1

如果您必须杀死一个线程才能让程序正常工作,那么您正在执行一些非常错误的操作*。 – 2012-08-07 21:40:17

+0

定期循环检查一些布尔变量,让它成为'proceed'。在主线程中,当另一个线程停止时,设置“proceed = False”;它会在下一次迭代时停止。 – 9000 2012-08-07 21:43:18

+0

你能更详细地描述这个问题吗?也许有更好的解决方案。我的意思是肯定有比杀死线程更好的解决方案。但是,也许你可以使用threading.Lock()对象来解决你的问题 – 2012-08-07 21:59:51

要做到这一点,最好的方法是使用线程定期检查的退出标志,并在设置后退出。当你需要杀死线程时,你可以设置这个标志并等待线程自行退出。

This answer有关于为什么强行杀死线程的其他信息是一个坏主意,以及上述方法的Python实现。

我发现如果您定义了一个带有self.flag变量的Threading类,并且让该函数调用该类的函数,则可以在特定于线程的实例上设置该标志并使用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 .........