猿问

我想问一下,tkinter 做多线程爬虫,让他停止该怎么做 quit 和 exit 都是直接退出程序

thread=threading.Thread(target=self.threading_run);
thread.start()
pass
defthreading_run_s(self):
print("-----------****************++++++++")
print(url)
forxbinrange(10):
print(xb)
output.Output(str(xb))
time.sleep(10)
吃鸡游戏
浏览 1284回答 2
2回答

qq_遁去的一_1

Python的threading类没有提供退出方法,退出方法需要自己实现.这涉及到两个问题:线程通信:子线程怎么知道父线程让子线程退出.退出的实现:子线程知道之后该怎么退出线程通信threading提供了Event这个类,实际上这个类就是一个信号,可以比较方便的实现线程间通信.因为多线程运行在一个进程中,也可以自己定义一个类来传递信号.略过不表.#coding:utf-8importthreadingimporttimesignal=threading.Event()#定义一个信号defworker(signal,*args,**kwargs):"""子线程核心函数Arguments:signal{threading.Event}--接收的信号"""#如果信号为False,则执行任务whilenotsignal.isSet():#执行工作print("working")time.sleep(1)print("exiting")#信号为True时,退出子线程exit()t=threading.Thread(target=worker,args=(signal,))t.start()time.sleep(2)print(u"发送退出信号")signal.set()time.sleep(1.5)print(u"当前子线程的状态为{}".format(t.isAlive()))time.sleep(1)输出workingworking发送退出信号exiting当前子线程的状态为False在子线程内部调用exit(),是退出子线程而不是退出主线程,调用位置的问题.退出线程退出线程有很多办法,不过核心就是判断信号的状态.这就需要在worker流程控制中加好判断点位.要明确退出不是指令发出去立刻就会执行,而是处理信号的代码发现了信号改变才会停止worker,这个是需要自己实现的.比如上方代码在signal.isSet()发生改变之后,跳出了while循环,实际上worker已经结束了,exit方法是为了增加可读性的,完全没必要加.通过任何方法结束线程都可以,运行完毕或者手动exit都可以
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答