python线程以最佳方式终止或终止

时间:2017-02-09 08:34:47

标签: python python-multithreading

问题是我想要杀死当前正在运行的所有线程。例如,我有一个按钮,它调用for循环。突然间我想阻止它。

这是我的代码:

class WorkerThread(threading.Thread):
    def __init__(self,t,*args):
        super(WorkerThread,self).__init__(target=t,args=(args[0],args[3]))
        self.start()
        self.join()

我的实施:

def running(fileopen,methodRun):
    #....long task of code are here...


for file in fileTarget:
        threads.append(WorkerThread(running,file,count,len(fileTarget),"FindHeader"))

1 个答案:

答案 0 :(得分:3)

永远不要试图突然终止一个线程。而是在WorkerThread类中设置一个标志/信号,然后当你想要它停止时只需设置标志并使线程完成通过它自己。

您对如何继承threading.Thread也有误解。如果您决定将函数作为线程运行,则它应为:

thread = threading.Thread(target=my_func, args=(arg1, arg2...))
thread.start()

嗯,在您的情况下,这将不适合您的需求,因为您希望线程在请求​​时停止。所以现在让我们的子类threading.Thread,基本上 __init__就像python中的构造函数,每次创建实例时它都会被执行。并且您立即start()线程然后使用join()阻止它,它在for循环中的作用threads.append(WorkerThread(running,file,count,len(fileTarget),"FindHeader"))将阻塞,直到running结束{{1}然后继续使用另一个file,没有使用实际的线程。

您应该将file移至 run()

running(fileopen,methodRun)