问题是我想要杀死当前正在运行的所有线程。例如,我有一个按钮,它调用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"))
答案 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)