【Python】python获取线程的返回值
threading模块默认没有获取线程返回值的方法。
下面通过重写threading.Tread类来实现:
fromthreadingimportThreadimportrandomimporttimeclassMyThread(Thread):#继承Thread类def__init__(self,group=None,target=None,name=None,args=(),kwargs=None,*,daemin=None):Thread.__init__(group,target,name,args,kwargs,daemin=None)self._return_value=Nonedefrun(self):#重新定义Thread类里的run方法try:ifself._target:self._return_value=self._target(*args,**kwargs)#把原来的self._target方法返回值赋给self._return_valuefinally:delself._target,self._args,self._kwargsdefjoin(self,timeout=None):#重新定义join方法,等待线程执行完成,返回值Thread.join(self,timeout)#调用原类的join方法,原方法中调用Thread类外方法,所以不能直接重写。returnself._return_value#返回self._return_value,在类外,使用join获取值。classReturnValue(object):#调用自定义的thread类,获取返回值。def__init__(self):self.result=Nonedefrun(self):thread_list=[]thread_result={}foriinrange(10)mythread=MyThread(target=self.show,args=(i,))thread_list.append(mythread)mythread.start()fortinthread_list:self.result=t.join()thread_result[t]=self.resultthread_list.remove(t)fork,vthread_result.items():print(k,v)defshow(self,i):rand=random.randint(2,7)time.sleep(rand)return"args:{},rand_value:{}".format(i,rand)return_value=ReturnValue()return_value.run()
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。