杀死特定的线程Python

时间:2012-08-07 21:37:57

标签: python multithreading class function

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

2 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是使用线程定期检查的退出标志,如果已设置则退出。当您需要终止该线程时,您将设置此标志并等待线程自行退出。

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

答案 1 :(得分:0)

我发现如果您使用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  .........